Ubuntu 应用程序写入到";。日志1“;文件而不是";。日志“;运行logrotate后的文件
强制运行Ubuntu 应用程序写入到";。日志1“;文件而不是";。日志“;运行logrotate后的文件,ubuntu,logging,logrotate,Ubuntu,Logging,Logrotate,强制运行logrotate后,我的应用程序将继续写入my_app.log.1(以后应存档的旧日志),而不是my_app.log 这使得my_app.log成为一个空文件,因此logrotate运行时没有任何效果。而my_app.log.1的容量将持续增长到千兆字节 我正在运行Ubuntu 12.04。我的应用程序是一个使用Node.js的应用程序。以下是我的logrotate配置: "/var/log/my_app/*.log" { daily size 50M rotate 10
logrotate
后,我的应用程序将继续写入my_app.log.1
(以后应存档的旧日志),而不是my_app.log
这使得my_app.log
成为一个空文件,因此logrotate
运行时没有任何效果。而my_app.log.1
的容量将持续增长到千兆字节
我正在运行Ubuntu 12.04。我的应用程序是一个使用Node.js的应用程序。以下是我的logrotate配置:
"/var/log/my_app/*.log" {
daily
size 50M
rotate 10
missingok
compress
delaycompress
notifempty
}
我知道我把notifempty放在那里了,但是为什么我的app.log.1首先要写在那里呢?我终于想出了解决问题的办法 这是因为日志文件是由
pm2
编写的logrotate
将其名称更改为my_app.log.1
并创建了新的my_app.log
文件,但pm2
对此并不在意,一直在向my_app.log.1
写入
我用copyruncate
替换了notifempty
选项,然后重新启动了pm2
,解决了这个问题。修复后,notifempty
可以添加回来,但我并不真正需要它
有关更多信息,请参阅。希望这能帮助其他人解决类似问题。如果应用程序在运行时保持日志文件打开,则不会受到文件名更改的影响。它继续在文件中写入
logrotate
可以配置(在postrotate
脚本中)在重命名文件后重新启动应用程序(或者发送HUP
信号,如果应用程序响应)。文档中有一些示例。copytruncate有一个小问题。复制和截断文件时,会丢失一些数据。如何解决这个问题?我认为更好的解决方案是使用postrotate脚本重新启动pm2进程,但会增加额外的复杂性。