logrotateは、すでに回転しているログを回転させ続け、圧縮し続けます。

logrotateは、すでに回転しているログを回転させ続け、圧縮し続けます。

毎日新しいログファイルを生成するログがあります。以下は、ログをオンにした後に生成されたすべてのログのリストです。

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 バージョンのログファイルを保持してください。logrotate1日に1つのバージョンが維持されるため、何も削除されません。

名前が「log-2019-01-09」などになるように、これらのログファイルを生成することが「log-」のような接頭辞を持つことが確実であれば、うまく機能します。これでlogrotate、使用するかどうかがわかりdateext、これが日付部分が独自に作成されたと仮定するように欺くことができるdateformat -%Y-%m-%dことを願っています。これで構成は次のようになります。logrotatelogrotate

/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

おすすめ記事