Приложение записывает файл ".log.1" вместо файла ".log" после запуска logrotate

После силового запуска logrotate мое приложение продолжает писать my_app.log.1 (старый журнал, который должен быть заархивирован позже) вместо my_app.log.

Это делает my_app.log пустой файл, поэтому logrotate работает без какого-либо эффекта. И my_app.log.1 продолжает расти до гигабайт.

Я запускаю Ubuntu 12.04. Мое приложение - это приложение Node.js, используя pm2. Ниже приведена моя конфигурация logrotate:

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

Я знаю, что я положил notifempty туда, но почему my_app.log.1 записано в первую очередь?

Ответ 1

Я наконец понял, как решить проблему.

Это связано с тем, что файл журнала записывался pm2. logrotate изменило свое имя на my_app.log.1 и создало новый файл my_app.log, но pm2 не заботился об этом и продолжал писать в my_app.log.1.

Я решил проблему, заменив опцию notifempty на copytruncate, а затем перезапустил pm2. После фиксации notifempty можно добавить назад, но мне это действительно не нужно.

Дополнительную информацию см. в logrotate ссылка. Надеюсь, это поможет другим людям получить аналогичную проблему.