2010-04-26 52 views
3

我有一個程序在多臺機器上運行NFS,我想將它們的所有輸出記錄到一個文件中。我可以在每臺計算機上運行./my_program >> filename,還是存在併發性問題,我應該注意?由於我只是追加,我不認爲會有問題,但我只是想確定。將多個stdouts重定向到單個文件

+0

嘗試superuser.com – WhirlWind 2010-04-26 00:28:48

+1

從多個nfs客戶端寫入單個文件最終會導致文件損壞,而不僅僅是交錯數據。 – 2010-04-26 05:09:50

回答

3

這可以工作,但是,您將遇到併發問題,並且日誌文件基本上無法解讀。

我會建議是,有對每一個機器,然後在一些週期性的基礎上(比如夜間)日誌文件,該文件與機器名作爲文件名一起串連:

for i in "/path/to/logfiles/*"; do 
    echo "Machine: $i"; 
    cat $i; 
done > filename.log 

那應該給你一些想法,我想。

+0

它爲什麼認爲這是C? * Facepalm * – supercheetah 2010-04-26 05:06:34

+0

那麼,報價就好了。 – supercheetah 2010-04-26 05:09:31

2

NFS協議不支持原子追加寫操作,所以在任何平臺上,追加寫操作在NFS上都不會原子化。如果您嘗試,文件將最終損壞。

當追加到來自多個線程或進程的文件時,在文件以附加模式打開的情況下,該文件的fwrites是原子的,寫入它的字符串不超過文件系統塊大小,文件系統是本地的。在NFS中哪個不是這種情況。

有一個解決方法,雖然我不知道如何從shellcript中做到這一點。該技術被稱爲close-to-open cache consistency

相關問題