问题复现
Linux后台有一个定时任务TaskA,该任务会持续打印日志。由于日志内容较多,导致日志文件较大,所以间隔一段时间会清空日志文件。但是清空日志文件后,任务TaskA接着打印日志时,发现日志文件开头会多出很多^@字符,日志文件大小相比清空前也大了很多。
定时任务格式如下:
10 2 * * * nohup python log.py 1>./log/test.log 2>&1 &
清空日志文件操作如下:
> ./log/test.log
原因
^@就是’\0’表示空字符,出现这个问题应该是因为清空日志文件后,指针停留在文件中的某个位置,然后写入文件就从这个指针开始写,导致指针前面的部分全部用空字符填充。 参考自:https://blog.youkuaiyun.com/sky6even/article/details/102948938
解决方案
将定时任务的重定向符号 “>” 修改成追加写入 “>>” 即可解决问题。修改后的定时任务格式如下:
10 2 * * * nohup python log.py 1>>./log/test.log 2>&1 &
原理:“>”的意思是将程序输出的内容覆盖log文件原有的内容,“>>”的意思是将程序输出的内容追加到log文件中。参考自:https://blog.youkuaiyun.com/weixin_34088598/article/details/92402746