ubuntu - 应用程序在运行 logrotate 后写入 ".log.1"文件而不是 ".log"文件

标签 ubuntu logging logrotate

强制运行 logrotate 后,我的应用程序继续写入 my_app.log.1(应该稍后存档的旧日志)而不是 my_app.log

这使 my_app.log 成为一个空文件,因此 logrotate 运行时没有任何效果。 my_app.log.1 不断增长到千兆字节。

我正在运行 Ubuntu 12.04。我的应用程序是一个使用 pm2 的 Node.js 应用程序.以下是我的 logrotate 配置:

"/var/log/my_app/*.log" {
  daily
  size 50M
  rotate 10
  missingok
  compress
  delaycompress
  notifempty
}

我知道我把 notifempty 放在那里了,但为什么首先要写入 my_app.log.1

最佳答案

我终于想出了解决问题的方法。

这是因为日志文件是由 pm2 写入的。 logrotate 将其名称更改为 my_app.log.1 并创建了新的 my_app.log 文件,但是 pm2 没有关心这个并不断写入 my_app.log.1

我通过将 notifempty 选项替换为 copytruncate 解决了这个问题,然后重新启动了 pm2。修复后,notifempty 可以添加回来,但我并不真的需要它。

参见 logrotate reference了解更多信息。希望这能帮助其他遇到类似问题的人。

关于ubuntu - 应用程序在运行 logrotate 后写入 ".log.1"文件而不是 ".log"文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22193874/

相关文章:

linux - 如何使用 Logrotate 保留 14 天的日志?

linux - Logrotate daily+maxsize不旋转

java - Ubuntu 16.04 : Why is the directory of tomcat 8 split up? 如何在Eclipse中引用?

opencv - 如何删除 openCV

java - 使用 logback 进行基于组件的日志记录(或 : intercept foreign log messages)

linux - logrotate 在 postrotate 脚本之后压缩文件

php包含模板在ubuntu + apache + php上失败

linux - 如何让 Crontab 和 Tar 一起正确工作

python - 以 JSON 格式格式化 Airflow 日志

scala - Akka SLF4J 和 Scala 中的 logback