2010-01-19 93 views
1

說我有一個bash腳本:同時管多個輸出到同一個文件?

#!/bin/bash 
php ./listen.php 3001 3003 26 & 
php ./listen.php 3002 3004 120 & 

我可以管他們都相同的輸出日誌文件,在沒有衝突的同一時間? 例如:

#!/bin/bash 
php ./listen.php 3001 3003 26 >/tmp/log 2>&1 & 
php ./listen.php 3002 3004 120 >/tmp/log 2>&1 & 

回答

4

>重寫,所以你要>>代替。標準輸出默認是行緩衝的,所以這是相對安全的。 stderr不是。不過你應該考慮寫入系統日誌。

+1

我非常確定stdout只在大多數平臺下溢出時才被緩存。對標準輸出的非常大的寫入在BUFSZ塊中完成,而不考慮行尾。但是,是的,系統日誌的建議似乎是最好的,有實用程序,你可以使用這將從系統日誌stdin。 – 2010-01-19 20:15:46

+0

這需要明確:>要運行的第二個管道將刪除第一個管道的初始輸出。 >>這裏肯定是需要的。 – 2010-01-19 21:14:26

+0

我結束了管道他們到單獨的日誌文件只是爲了確保:) – jonaz 2010-01-26 00:35:47

0

最有可能的是,如果每寫寫入新的行結束行。

從這兩個應用程序的線將是interviling。試試看。

2

除非您積極地刷新標準輸出,否則很可能會得到交錯輸出。你要更好地管道到logger(1)命令,它將以原子方式執行每個寫入系統日誌。不要被愚弄(因爲我是!)-f選項—它不會讓您登錄到文件;相反,它將該文件的內容寫入系統日誌。 (感謝Platinum Azure進行更正。)

N.B.如果在您的系統上沒有訪問系統日誌的權限,則可以使用-u選項來寫入套接字。您可以使用netcat將套接字連接到文件。

+0

似乎-f真的是指根據我的機器和您的鏈接上的手冊頁,將特定文件放入日誌。回聲「等等」|記錄器-f/tmp/blahblah(帶/ tmp/blahblah不存在)產生「沒有這樣的文件或目錄」錯誤。 – 2010-01-19 21:04:32

0

理論上你可以:

#!/bin/bash 

{ php ./listen.php 3001 3003 26 & php ./listen.php 3002 3004 120 & } >/tmp/log 2>&1 

,但我不知道結果會怎樣,可讀性會。

相關問題