logrotate の 1 日目は rotate されない
◆ daily で rotate する場合
◆ 初回実行(state ファイルに日時なし)は state ファイルに日時が追記されるだけ
◆ rotate はされない
◆ state ファイルの日時があって次の日以降なら rotate される
◆ 初回実行(state ファイルに日時なし)は state ファイルに日時が追記されるだけ
◆ rotate はされない
◆ state ファイルの日時があって次の日以降なら rotate される
初日は rotate されない
設定翌日に見て rotate されてないな と思って調べてみたら 1 日目は rotate されないみたいです前回実行の情報が state ファイルに保存されていて それから 1 日経っていたら rotate が実行されます
初回は state ファイルに情報がないので rotate はなしで state ファイルに追記だけでした
rotate するタイミングは深夜にして 1 日に設定してログを出力するプロセスを起動します
2 日にログを見ると → rotate 無しで 1 日と 2 日の分が含まれる
3 日にログを見ると → 1 日と 2 日の分が別ファイルになっていて 3 日分が最新のログファイル含まれる
という動きです
初日も rotate させたいなら state ファイルに前日分の日付で追記しておけば rotate されます
state ファイルには rotate 対象のファイルごとの前回の rotate が起きた日時が書かれます
なので 11/2 に 11/1 分を rotate してほしいなら 11/1 の日付で rotate されたということを state ファイルに書いておきます
/opt/test/file が rotate 対象なら
logrotate state -- version 2
"/opt/test/file" 2020-11-1-3:0:0
という感じです
ファイルが空なら rotate 処理がスキップされて日付も更新されないので 前日以前の日付ならなんでもいいはずです
試してみる
logrotate は時間が来なくても コマンド実行だけで試せるので 試してみます/home/user1/lr/
を今回のファイル置き場にします
[conf]
/home/user1/lr/test {
daily
rotate 5
dateext
copytruncate
notifempty
}
rotate 対象は test ファイルです
適当に中身を作ります
user1@s04 ~/lr> echo aaa > test
logrotate を実行します
state ファイルは同じフォルダ内に作ります
user1@s04 ~/lr> logrotate conf -s state
user1@s04 ~/lr> ls
conf state test
user1@s04 ~/lr> cat state
logrotate state -- version 2
"/home/user1/lr/test" 2020-11-2-13:0:0
rotate はされず test ファイルはそのままです
state ファイルが作られて 実行時刻が追記されました
今度は 最初から state ファイルに 前日の日付が含まれる状態でやってみます
test ファイルは変更なかったので state ファイルだけ下のように変更してから もう一度 logrotate を実行します
logrotate state -- version 2
"/home/user1/lr/test" 2020-11-1-13:0:0
user1@s04 ~/lr> logrotate conf -s state
user1@s04 ~/lr> ll
合計 12K
-rw-r--r-- 1 user1 user1 91 11月 2 13:09 conf
-rw-r--r-- 1 user1 user1 70 11月 2 13:35 state
-rw-r--r-- 1 user1 user1 0 11月 2 13:35 test
-rw-r--r-- 1 user1 user1 4 11月 2 13:35 test-20201102
user1@s04 ~/lr> cat state
logrotate state -- version 2
"/home/user1/lr/test" 2020-11-2-13:35:23
user1@s04 ~/lr> cat test-20201102
aaa
user1@s04 ~/lr> cat test
新しいファイルが作られ rotate されています
state ファイルの時刻は初回とは違って正確な時刻まで入ってます
試したバージョンは logrotate 3.15.1 です