logrotateを使ってローテションを行う
設定方法&確認
下記などを参考にした。
logrotateでログのローテーションをする - おもしろwebサービス開発日記
logrotate でデフォルト以外のフォーマットで日付ファイル名にしたいとき - Qiita
こんな感じで設定してみた。
日次で前の日のログをローテートするのに日付がローテートした日付なのがなんか気持ち悪いから、lastactionで前の日のファイル名にしてみた。
(これでいいかはちょっと自信ない)
追記(2018/04/12)
postrotateでやってないのは、compressを指定しているから。
ローテート→postrotate→compressの流れになるようなので、postrotateでrenameするとcompressがrename前のファイルを圧縮しようとしてエラーになった。
/my/rails/application/log/*.log { daily rotate 30 missingok notifempty copytruncate dateext dateformat .%Y%m%d compress su root root lastaction for infile in $1; do if [ -f $infile.`date '+%Y%m%d'`.gz ] ; then mv $infile.`date '+%Y%m%d'`.gz $infile.`date --date '1 days ago' '+%Y%m%d'`.gz fi done endscript }
logrotateのテストはf,dオプションをつけて確認する。
# dオプションを付けるとデバック実行で実際には実行されない $ logrotate -d /etc/logrotate.d/rails # fオプションだと実際に実行される $ logrotate -f /etc/logrotate.d/rails
といあえず指定できるやつは下記をみたら意味がわかると思う。
@IT:logrotateの設定ファイルで指定できる主なコマンド
他のオプションはmanを見るなどします。
cronの設定は必要か?
下記のように、/etc/crontabか/etc/anacrontabを確認しましょう。
【logrotateの実行タイミング】/etc/crontabに無い時の確認方法 - Qiita
今回検証していたCentOSの場合は/etc/anacrontabに設定されているので特にcronの設定をしなくても動くはず。