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 &
相关文章
相关标签/搜索