30歳パパエンジニアのアウトプット帳

30歳に突入した1児のパパエンジニアのブログ

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を見るなどします。

logrotate(8) - Linux man page

cronの設定は必要か?

下記のように、/etc/crontabか/etc/anacrontabを確認しましょう。

【logrotateの実行タイミング】/etc/crontabに無い時の確認方法 - Qiita


今回検証していたCentOSの場合は/etc/anacrontabに設定されているので特にcronの設定をしなくても動くはず。

https://daichan.club/linux/639

細かすぎて伝わらない anacron の挙動 - Qiita