UnixおよびLinux管理ハンドブックとman
によると、logrotateにはdaily
、weekly
、およびmonthly
のオプションがありますが、 hourly
オプション?
このブログ投稿 は、設定できると述べていますsize 1
と時間オプション(例:daily
)を削除してから、手動でlogrotate
をcron
で呼び出します-次のようなものだと思います
logrotate -f /etc/logrotate.d/my-hourly-file
しかし、ログを1時間ごとにローテーションするためのよりエレガントなソリューションはありますか?
お使いのOSによって異なります。一部(すべて?)のLinuxディストリビューションには、/etc/cron.hourly
というディレクトリがあり、cronジョブを1時間ごとに実行できます。
他には/etc/cron.d/
というディレクトリがあります。そこでは、crontabエントリの通常のcron設定を使用して、特別なユーザーとして実行されるcronジョブを配置できます(ユーザー名を指定する必要があります)。
/etc/cron.daily/
で標準のログローテーションスクリプトの代わりにこれらのいずれかを使用する場合は、そのスクリプトをそこにコピーし、cp /dev/null
を元の位置にコピーする必要があります。それ以外の場合は、logrotate patch-updateによって再アクティブ化されます。
時間ごとに適切にローテーションするには、dateext
ディレクティブがnotに設定されていることにも注意してください。その場合、デフォルトでは、最初にローテーションされたファイルには、YYYYMMDDのような現在の日付の拡張子が付けられます。次に、logrotateが同じ日に2回目にアクティブになると、size
しきい値を超えていても、ローテーションをスキップします。
その理由は、ローテーションするファイルの新しい名前がすでに存在し、logrotateが既存の古いファイルにコンテンツを追加しないためです。たとえば、RHELとCentOSでは、dateext
ディレクティブはデフォルトで/etc/logrotate.conf
に指定されています。その行を削除またはコメントした後、ローテーションされたファイルは、rotate
値に達するまで、実行番号を拡張子として取得します。このように、1日に複数のローテーションを実行することが可能です。
Nilsの回答に追加するだけで、DebianまたはUbuntuボックスでlogrotate
スクリプトの場所を変更する場合は、ファイルをコピーしてdpkg-divert
をコピーするよりも、/dev/null
を使用する方が安全です。元の位置に例:
dpkg-divert --add --rename --divert /etc/cron.hourly/logrotate /etc/cron.daily/logrotate
他の1つのオプションは、logrotateコマンドをcrontabリストに追加することです。その後、1時間ごとに実行されます。
crontab -e
以下の行をcrontabリストに追加します
0 * * * * /usr/sbin/logrotate /etc/logrotate.d/my-hourly-file