Linux 動態清空文件後 程序再向這個文件寫內容時 文件大小不變 並文件開頭多了不少^@符號

發現問題的過程是這樣的:
在後臺運行的程序內是用node寫的一個定時器,用於每15min向*.log文件中寫入日誌內容。命令大概是:node

node *.js > *.log &

而且,這個log文件是一天一清空的,也就是說log文件內的內容只保存前一天的。.net

ok,爲了達到這個效果,我就在任務計劃文件/etc/crontab中,加上這樣一條定時命令:日誌

30 9 * * * root cp /dev/null *.log

這裏的意思是,天天9點,用/dev/null文件「空」的特性清除log文件。code

結果,在當天晚上發現,log文件前面出現了不少^@符號,而且以前清空的log文件大小比被清空前還大。crontab

通過各類搜索案例後,發現問題出在「>」與「>>」上面,「>」的意思是將程序輸出的內容覆蓋log文件原有的內容,「>>」的意思是將程序輸出的內容追加到log文件中。get

也就是說,將上面第一條命令中的「>」修改成「>>」就能夠用cp /dev/null *.js或者 echo "" > *.js等方式清空日誌文件了。class

node *.js >> *.log &
相關文章
相關標籤/搜索