我编写了一个守护进程脚本,该脚本始终在后台运行。它设置为将 stdout 和 stderr 传输到一些日志文件,如下所示:
python27 etl_daemon.py 1>>/var/log/etl/etl_stdout.log 2>>/var/log/etl/etl_stderr.log
我已经在这些日志文件上设置了 logrotate,每个文件的配置基本如下:
$ cat /etc/logrotate.d/etl_stdout
/var/log/etl/etl_stdout.log {
daily
rotate 14
compress
logrotate 在压缩和重命名旧日志方面确实有效,但每次运行时似乎都会破坏我的脚本并使其继续运行但不再执行任何操作。我猜这可能与尝试写入现已重命名的文件有关,但我不确定。有什么想法吗?解决方案?
答案1
将该copytruncate
指令添加到您的 logrotate 节中。然后该文件将不会从您的守护进程中被拉出。
当您执行此操作时,请确保以附加模式写入(如您在示例中所做的那样),否则旋转后您将得到稀疏文件。