logrotateの動作確認に何日も待ってログが出力されているか確認するのはめんどうくさい。
そんなときは以下の方法。
まず前提として、logrotate は /var/lib/logrotate/logrotate.status の日時を見て動作します。
そのため、その日に作成したlogrotateのファイルを実行しても、実行できないということが起きます。
これを回避するためにあの手この手でテストをやりました。参考にどうぞ。
環境
CentOS7 (EC2)
logrotate.status の編集
まずlogrotate.statusを編集しましょう。
以下の例では [ 1/10 ] のステータスを [ 1/9 ] にしています(実行日:1/10)。
sed -i -e 's/1-10/1-9/g' /var/lib/logrotate/logrotate.status
すでにログファイルが残っている場合はテストのためリネームするか全部削除しましょう。
rename 0110 0109 /var/log/foo/*
変更できたかチェックします。
cat /var/lib/logrotate/logrotate.status
/etc/crontab の編集
crontabを数分後に実行できるよう編集します。
編集が終わったら再起動してください。
vi /etc/crontab
systemctl restart crond
cronが実行されたら、再度確認
cat /var/lib/logrotate/logrotate.status
ファイルができているか確認
ll /var/log/foo
タイムスタンプを編集
作成されたファイルの末尾を1日前にします。
rename 0110 0109 /var/log/foo/*
先ほど末尾を変更したファイルのタイムスタンプを変更します。
cd /var/log/foo
touch -t 01090500 *0109
再度 /etc/crontab の編集
vi /etc/crontab
systemctl restart crond
編集し終わったら、logrotate.status の日付を再度編集します。
sed -i -e 's/1-10/1-9/g' /var/lib/logrotate/logrotate.status
必要な日数分のファイルを作る
3-4の手順を繰り返し必要な分だけファイルを作ります。
あとはテストに合わせて条件変えて挙動を確認してください。
以上です。