-f オプションを使うと強制的にログローテーションを行うことになる。ヘルプを参照すると以下の内容が書いてある。
Tells logrotate to force the rotation, even if it doesn't think this is necessary. Sometimes this is useful after adding new entries to logrotate, or if old log files have been removed by hand, as the new files will be created, and logging will continue correctly.
これを超訳すると、以下のようになる。ローテートしたログファイルの状態にかかわらず、強制的にログ交換を行うということ。すなわち、このオプションを使えば必ずログ交換される。
ログ交換が必要でないと判断される場合でも、logrotate にログの交換を強制する。このオプションは新しいエントリをlogrotateに追加した後に有用である。すなわち、古いログファイルを手作業で削除し、新しいファイルが作成され、ログが正しく続いている場合等である。
つまり、以下のようにlogrotate に -f オプションをつけて実行ことで、必ずログ交換される。10回やれば10個ログファイルが作成され、confファイルでrotate 10となっていれば11回目からはローテーションが始まる。
$ /usr/sbin/logrotate -f -s /*******/lib/logrotate.status /*******/etc/logrotate.conf
このような使い方はフェアじゃないと思うかもしれないが、logrotateのmanpageには以下のような記述がある。
Normally, logrotate is run as a daily cron job. It will not modify a log multiple times in one day unless the criterium for that log is based on the log's size and logrotate is being run multiple times each day, or unless the -f or -force option is used.
これを超訳すると、以下のようになる。つまり、-fオプションを使ってローテーションの基準にかかわらず必ずログ交換するような使い方はヘルプにも書いてある。
通常、logrotateは一日1回cronから呼び出され、一日に複数回ログ交換を行うことは無い。ただし、ログサイズがローテーションの基準でかつ一日に複数回呼び出された場合、または -f または -fource オプションが使われた場合を除く。
例えば以下のように1時間に1回 logrotate を -f オプション付きで呼び出せば1時間に1回のログ交換が行われることになる。
$ crontab -e 0 * * * * /usr/sbin/logrotate -f -s /*******/lib/logrotate.status /*******/etc/logrotate.conf
-f オプションをつけている限り、logrotateの頻度はcronの呼び出し頻度に依存しているので、例えばcronの最小呼び出し頻度である1分ごとにログローテートしたい場合は以下のようにする。
$ crontab -e * * * * * /usr/sbin/logrotate -f -s /*******/lib/logrotate.status /*******/etc/logrotate.conf