2010-06-15 17 views

回答

4

慣用的伎倆是:

echo -n > /var/log/name.log 

,將工作前提是你的守護程序正常打開追加模式的日誌文件。他們大部分都是。 (該命令只是簡單地將文件大小截斷爲零,並且不會干涉其他進程以追加模式寫入文件。)

另一個選項是檢查守護進程是否支持syslog並將其激活。大多數Linux現在都附帶一些日誌採集器,它可以自動(根據規則等)歸檔syslog文件。

+0

因此,如果文件以追加模式打開,而另一個進程將其截斷,則第一個進程可以繼續寫入。謝謝! – arturh 2010-06-16 11:16:06

+0

追加模式的要點在於,寫入操作在實際寫入之前以原子方式尋找文件末尾 - 並在文件末尾寫入。如果一個進程截斷了該文件,守護進程甚至不會注意到,由於追加模式,操作系統將自動尋找到文件末尾,現在位於偏移量0。 – Dummy00001 2010-06-16 14:27:40

0

如果文件名是常量,您可以嘗試創建一個fifo來代替日誌文件,並根據需要將其讀入多個單獨的日誌文件中。

+0

這是一個不錯的選擇,但需要編寫更多的代碼來管理fifo。謝謝。 – arturh 2010-06-16 11:14:12

0

要修剪的日誌文件,但保留最近1000行吧:

echo "$(tail -1000 daemonlog)" > daemonlog