由2>使用logrotate旋转而创build的文件中的空字节?

我正在使用脚本实用程序来loggingterminal会话,并使用logrotate(使用copytruncate ,脚本忽略HUP,并不断写入旋转的文件)定期上传到目前为止发生的事情块到另一台服务器。 这对于实际的屏幕内容非常有用。

今天我也试图捕捉脚本发送到STDERR的时间信息。 所以我的新脚本configuration看起来像

 script -faqt session.record 2> session.timing 

问题是,当我在定时数据(session.timing)上使用logrotate时,回填文件以输出中的大量空字节开始,这导致scriptreplay在重新读取重build的文件时发生。

是否有一个已知的问题(并希望解决方法)使用logrotate与STDERR上的copytruncate选项redirect到一个文件?

你需要使用2>> (append)redirectstderr。 这是打开没有O_APPEND标志和logrotate的copytruncate文件的问题。

如果我无法解决它,我可以通过添加一个postrotate脚本来解决它:

 postrotate sed -i -e 's/\o00//g' session.timing.1 endscript 

这将删除第一个旋转的文件的任何 NULL字节(因为它们在脚本定时文件中的任何地方是非法的)。

假定在一个旋转的文件中,NULL有时是OK的,你可以改变这个sed命令,从文件的第0行开始去掉NULL字节。