logrotate
ログファイルを回転させるにはwithを使用しており、copytruncate
新しいファイル名をパラメータとしてスクリプトを実行する必要があります。$1
insideが利用可能であることを知っていますが、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]*'):
...