Logrotate:回転したファイルを使用してpostrotateスクリプトを実行する

Logrotate:回転したファイルを使用してpostrotateスクリプトを実行する

logrotateログファイルを回転させるにはwithを使用しており、copytruncate新しいファイル名をパラメータとしてスクリプトを実行する必要があります。$1insideが利用可能であることを知っていますが、postrotateこれは日付拡張子を持つファイルではなく回転したファイルの名前を提供します。

だから基本的に私は以下を持っています:

/var/log/myapp/server.log

このlogrotate構成を実行すると、次のようになります。

/var/log/myapp/server.log {
  copytruncate
  rotate 1008
  dateext
  dateformat -%s
  create 660 syslog syslog
  postrotate
    python3 /opt/myapp/test.py $1 > /dev/null
  endscript
}

わかりました。

/var/log/myapp/server.log <-- (now empty)
/var/log/myapp/server.log-1536844088

回転後にスクリプトを何とか実行できますか/var/log/myapp/server.log-1536844088

ベストアンサー1

私が理解したように、logrotateはログファイル名をのpostrotateスクリプトに渡します。スクリプトと最初の引数を使用し、logrotateが日付形式を使用して回転したファイルを生成したという知識を使用して、これらのファイルのリストを-%s生成できます。

import sys
import fnmatch
import os

for file in os.listdir(os.path.dirname(sys.argv[1])):
        if fnmatch.fnmatch(file, os.path.basename(sys.argv[1]) + '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'):
                print(file)

これは私の最初のPythonスクリプトなので寛容ではありませんが、アイデアを見せたいと思います。 fnmatch() 関数で使用される glob は、数年間 (2286 年 11 月末まで) 9,999,999,999 秒が 10,000,000,000 秒にロールオーバーされます。 「ただ」「10桁の数字のみ」必要に応じて範囲を「拡大」できます。

...
if fnmatch.fnmatch(file, os.path.basename(sys.argv[1]) + '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*'):
...

おすすめ記事