sidekiqのログをローテーションさせる方法をネットで調べると、USR2シグナルを送るべしという情報を見つけることができます。中でも以下のサイトは、そのものズバリのコンフィグが用意されていました。
Sidekiq で logrotate を使うときは USR2 シグナルを送る
ただ残念ながら、多分コンフィグにバグがある(test -s $pid
ではなくtest -s $sidekiq_pid
)と思われます。実際試してみると、修正前ではうまくローテーションされず修正後だとローテーションされました。
なので、修正したスクリプトを以下に記しておきます。
/etc/logrotate.d/my_rails_app
/data/my_rails_app/shared/log/*.log {
daily
missingok
rotate 10
size 10M
dateext
notifempty
copytruncate
compress
delaycompress
lastaction
unicorn_pid=/data/my_rails_app/shared/tmp/pids/unicorn.pid
test -s $unicorn_pid && kill -USR1 "$(cat $unicorn_pid)"
sidekiq_pid=/data/my_rails_app/shared/tmp/pids/sidekiq.pid
test -s $sidekiq_pid && kill -USR2 "$(cat $sidekiq_pid)"
endscript
}