LoginSignup
3

More than 5 years have passed since last update.

logrotate が圧縮してくれなかった

Posted at

現象

とある rails アプリケーションのログローテートを設定していたが思ったように圧縮してくれない場合があった。

/path/to/app/log/*.log {
  daily
  rotate 7
  dateext
  missingok
  compress
  su ec2-user ec2-user
  sharedscripts
  postrotate
    puma_pid=/path/to/app/tmp/pids/puma.pid
    test -e $puma_pid && kill -USR2 $(cat $puma_pid)
  endscript
}

logrotate -f で強制的に実行してみると以下のようなエラーが出ていた。

error: error running shared postrotate script for '/path/to/app/log/*.log '

原因

以下のように puma.pid ファイルが存在する場合に puma の再起動を行う記述がまずいらしい。

    test -e $puma_pid && kill -USR2 $(cat $puma_pid)

上記だと、test -e $puma_pid でファイルの存在チェックを行って、存在しない場合はそのままスクリプトが終了するが、そのときの exit コードが 1 (異常) となって圧縮処理が行われない。

それを回避するため以下のように記述

    test -e $puma_pid && kill -USR2 $(cat $puma_pid) || true

上記のように、ファイルが存在せず再起動を実行しなかった場合は true を呼び出して exit コードを 0 (正常) にする。

これで想定どおりに圧縮されるようになった。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3