毎日新しいログファイルを生成するログがあります。以下は、ログをオンにした後に生成されたすべてのログのリストです。
2019-01-04
2019-01-05
2019-01-06
2019-01-07
2019-01-08
これは対数回転構成です。何度も繰り返してみましたが、ログが圧縮されずにロールオフされるまで(90日以内)「放しておきました」。
/etc/logrotate.d/remote
/var/log/remote/*/*[!.]gz
/var/log/remote/*/*.[!g]z
/var/log/remote/*/*.g[!z]
/var/log/remote/*/*[!.][!g]z
/var/log/remote/*/*[!.]g[!z]
/var/log/remote/*/*.[!g][!z]
/var/log/remote/*/*[!.][!g][!z]
{
rotate 90
daily
missingok
compress
}
これは logrotate が実行するアクションを示すフォルダのリストです。
drwxr-xr-x 2 root root 4.0K Jan 8 06:25 ./
drwxr-xr-x 6 root root 4.0K Jan 4 09:44 ../
-rw-r----- 1 root adm 0 Jan 8 06:25 2019-01-04
-rw-r----- 1 root adm 20 Jan 7 06:25 2019-01-04.1.gz
-rw-r----- 1 root adm 20 Jan 6 06:25 2019-01-04.2.gz
-rw-r----- 1 root adm 5.2K Jan 4 23:57 2019-01-04.3.gz
-rw-r----- 1 root adm 0 Jan 8 06:25 2019-01-05
-rw-r----- 1 root adm 20 Jan 7 06:25 2019-01-05.1.gz
-rw-r----- 1 root adm 20 Jan 6 06:25 2019-01-05.2.gz
-rw-r----- 1 root adm 7.4K Jan 5 23:58 2019-01-05.3.gz
-rw-r----- 1 root adm 0 Jan 8 06:25 2019-01-06
-rw-r----- 1 root adm 20 Jan 7 06:25 2019-01-06.1.gz
-rw-r----- 1 root adm 8.0K Jan 6 23:56 2019-01-06.2.gz
-rw-r----- 1 root adm 0 Jan 8 06:25 2019-01-07
-rw-r----- 1 root adm 7.8K Jan 7 23:55 2019-01-07.1.gz
-rw-r----- 1 root adm 101K Jan 8 13:16 2019-01-08
ログアーカイブ日数を管理し、管理するときに古いログを圧縮したいと思います。これが私が望む結果です:
drwxr-xr-x 2 root root 4.0K Jan 8 06:25 ./
drwxr-xr-x 6 root root 4.0K Jan 4 09:44 ../
-rw-r----- 1 root adm 20 Jan 7 06:25 2019-01-04.1.gz
-rw-r----- 1 root adm 20 Jan 7 06:25 2019-01-05.1.gz
-rw-r----- 1 root adm 20 Jan 7 06:25 2019-01-06.1.gz
-rw-r----- 1 root adm 7.8K Jan 7 23:55 2019-01-07.1.gz
-rw-r----- 1 root adm 101K Jan 8 13:16 2019-01-08
ベストアンサー1
デフォルトでは、指定されたディレクトリで数字で終わるログファイルを回転しようとしているため、ログの一致は次のとおりです。
/var/log/remote/*/*[0-9]
1つの問題は、logrotate
オプションをcreate
デフォルト値に設定できることです。つまり、ログファイルが回転した後(つまり、名前が変更されて圧縮される可能性がある)、新しいログファイルが元の名前で作成されます。nocreate
これを防ぐには、このオプションを使用してください。
ただし、最大の問題は、ログファイルに固定名がないことです。logrotate
名前は毎日変更されるため、X バージョンのログファイルを保持してください。logrotate
1日に1つのバージョンが維持されるため、何も削除されません。
名前が「log-2019-01-09」などになるように、これらのログファイルを生成することが「log-」のような接頭辞を持つことが確実であれば、うまく機能します。これでlogrotate
、使用するかどうかがわかりdateext
、これが日付部分が独自に作成されたと仮定するように欺くことができるdateformat -%Y-%m-%d
ことを願っています。これで構成は次のようになります。logrotate
logrotate
/var/log/remote/*/log {
nocreate
dateext
dateformat -%Y-%m-%d
delaycompress
}
しかし、私があなたであれば、logrotate
これらのログファイルが期待どおりに動作するように強制することはありませんlogrotate
。たとえば、独自のログ有効期限スクリプトをロールアウトします。
#!/bin/sh
DAYS=90
TOPDIR=/var/log/remote
cd $TOPDIR
for i in *; do
if ! [ -d $TOPDIR/$i ]; then
continue
fi
cd $TOPDIR/$i
find -maxdepth 1 -type f -name '????-??-??' -mtime +1 -exec gzip {} \;
find -maxdepth 1 -type f -name '????-??-??.gz' -mtime +$DAYS -delete
done