🌚

logrotate の sharedscripts とは?

2023/09/07に公開

logrotate sharedscripts って何???

logrotateのローテーションファイルを設定しようとした際に、
"sharedscripts"オプションだけ、説明を読んでもピンとこなかった🥺

複数指定したログファイルに対し、postrotateまたはprerotateで記述したコマンドを実行

[https://atmarkit.itmedia.co.jp/flinux/rensai/linuxtips/747logrotatecmd.html]

ChatGptに聞いてみた

sharedscripts オプションを使用する場合、それに関連するスクリプト(prerotatepostrotate セクション内のスクリプト)は、ログファイルのローテーション処理の特定のタイミングで実行されます。以下は、sharedscripts の実行タイミングについての詳細です。

  1. ローテーション前 (prerotate スクリプト):
    prerotate セクション内のスクリプトは、ログファイルがローテーションされる前に実行されます。つまり、古いログファイルがまだアクセス可能であり、新しいログファイルがまだ作成されていない状態で実行されます。これを利用して、古いログファイルに対する特別な処理を行うことができます。たとえば、ログファイルを圧縮する前に、特定の処理を実行することができます。

  2. ローテーション後 (postrotate スクリプト):
    postrotate セクション内のスクリプトは、ログファイルがローテーションされた後に実行されます。新しいログファイルが作成され、古いログファイルが圧縮されたり、リネームされたりする前に実行されます。このタイミングを利用して、ローテーション後の処理や通知を実行できます。

sharedscripts オプションを指定することで、同じログファイルに関連する複数のアクションが、ローテーション前とローテーション後に一度だけ実行されることになります。このため、prerotatepostrotate スクリプト内で、同じログファイルに対しての処理やアクションを共有できます。

↑ほう... 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