logrotate の sharedscripts とは?
logrotate sharedscripts って何???
logrotateのローテーションファイルを設定しようとした際に、
"sharedscripts"オプションだけ、説明を読んでもピンとこなかった🥺
複数指定したログファイルに対し、postrotateまたはprerotateで記述したコマンドを実行
[https://atmarkit.itmedia.co.jp/flinux/rensai/linuxtips/747logrotatecmd.html]
ChatGptに聞いてみた
sharedscripts
オプションを使用する場合、それに関連するスクリプト(prerotate
と postrotate
セクション内のスクリプト)は、ログファイルのローテーション処理の特定のタイミングで実行されます。以下は、sharedscripts
の実行タイミングについての詳細です。
-
ローテーション前 (
prerotate
スクリプト):
prerotate
セクション内のスクリプトは、ログファイルがローテーションされる前に実行されます。つまり、古いログファイルがまだアクセス可能であり、新しいログファイルがまだ作成されていない状態で実行されます。これを利用して、古いログファイルに対する特別な処理を行うことができます。たとえば、ログファイルを圧縮する前に、特定の処理を実行することができます。 -
ローテーション後 (
postrotate
スクリプト):
postrotate
セクション内のスクリプトは、ログファイルがローテーションされた後に実行されます。新しいログファイルが作成され、古いログファイルが圧縮されたり、リネームされたりする前に実行されます。このタイミングを利用して、ローテーション後の処理や通知を実行できます。
sharedscripts
オプションを指定することで、同じログファイルに関連する複数のアクションが、ローテーション前とローテーション後に一度だけ実行されることになります。このため、prerotate
と postrotate
スクリプト内で、同じログファイルに対しての処理やアクションを共有できます。
↑ほう... prerotateとpostrotateの挙動が変わるんやな、 検証してみよう
検証してみた
実際に、*.log (a.log, b.log) を ローテートさせて
ログを確認してみた
- /etc/logrotate.d/test (設定ファイル)
/var/log/test/*log {
...
sharedscripts
prerotate
echo "prerotate moved!" >> ~/test.txt
endscript
postrotate
echo "postrotate moved!" >> ~/test.txt
endscript
...
}
sharedscripts有
- log
rotating log /var/log/test/a.log, log->rotateCount is 10
...
rotating log /var/log/test/b.log, log->rotateCount is 10
...
running prerotate script
copying /var/log/test/a.log to /var/log/test/a.log-20230907
truncating /var/log/test/a.log
copying /var/log/test/b.log to /var/log/test/b.log-20230907
truncating /var/log/test/b.log
running postrotate script
...
- ~/test.txt
prerotate moved!
postrotate moved!
sharedscripts無
- log
rotating log /var/log/test/a.log, log->rotateCount is 10
...
running prerotate script
copying /var/log/test/a.log to /var/log/test/a.log-20230907
truncating /var/log/test/a.log
running postrotate script
...
rotating log /var/log/test/b.log, log->rotateCount is 10
...
running prerotate script
copying /var/log/test/b.log to /var/log/test/b.log-20230907
truncating /var/log/test/b.log
running postrotate script
- ~/test.txt
prerotate moved!
postrotate moved!
prerotate moved!
postrotate moved!
まとめ
*.log (a.log, b.log)
-
sharedscripts有
- prerotate(前スクリプト)
- a.logのローテート
- b.logのローテート
- postrotate(後スクリプト)
-
sharedscripts無
- prerotate(前スクリプト)
- a.logのローテート
- postrotate(後スクリプト)
↓ - prerotate(前スクリプト)
- b.logのローテート
- postrotate(後スクリプト)
感想
検証大事やね
参考サイト
[https://isleofhoso.com/linux-logrotate/]
[https://atmarkit.itmedia.co.jp/flinux/rensai/linuxtips/747logrotatecmd.html]
[https://autovice.jp/articles/115]
Discussion