web-dev-qa-db-ja.com

ログを1時間ごとにローテーションするようにlogrotateを設定するにはどうすればよいですか?

UnixおよびLinux管理ハンドブックとmanによると、logrotateにはdailyweekly、およびmonthlyのオプションがありますが、 hourlyオプション?

このブログ投稿 は、設定できると述べていますsize 1と時間オプション(例:daily)を削除してから、手動でlogrotatecronで呼び出します-次のようなものだと思います

logrotate -f /etc/logrotate.d/my-hourly-file

しかし、ログを1時間ごとにローテーションするためのよりエレガントなソリューションはありますか?

23
cwd

お使いの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日に複数のローテーションを実行することが可能です。

20
Nils

Nilsの回答に追加するだけで、DebianまたはUbuntuボックスでlogrotateスクリプトの場所を変更する場合は、ファイルをコピーしてdpkg-divertをコピーするよりも、/dev/nullを使用する方が安全です。元の位置に例:

dpkg-divert --add --rename --divert /etc/cron.hourly/logrotate /etc/cron.daily/logrotate
5
boltronics

他の1つのオプションは、logrotateコマンドをcrontabリストに追加することです。その後、1時間ごとに実行されます。

crontab -e

以下の行をcrontabリストに追加します

0 * * * * /usr/sbin/logrotate /etc/logrotate.d/my-hourly-file
3
Wasantha Herath