web-dev-qa-db-ja.com

cronologでローテーションされたログを圧縮します

ログがcronologでローテーションされているApacheを備えたサーバー(Centos 5.x)がたくさんあります。一定時間後にこれらのログを自動的に圧縮および削除するための最良の戦略は何ですか? CustomLog "|/usr/sbin/cronolog /var/log/httpd/my.examplehost.com/access_log-%Y%m%d" common

私はちょうど言うcronスクリプトを作成することを考えていました

gzip /var/logs/httpd/my.examplehost.com/*

しかし、それはApacheが現在書き込んでいるファイルも圧縮しようとしませんか? cronologのホームページには、cronジョブなどに書き込む必要があるとだけ記載されていますが、その方法についての説明はありません。

3
palto

Logrotateは実際にはこのジョブのツールですが、使用できない場合は、find-ctimeパターンメーターを使用できます。

find /var/logs/httpd/my.example.Host.com/ -ctime +0 -not -name '*.gz' -exec gzip {} \; 

まだ圧縮されていない24時間以上前に変更されたファイルを検出し、それらを圧縮するため、必要な処理を実行する必要があります。

作業中のファイルがまだ開いていないことを確認するには、次のようにします。

#!/bin/bash
for file in $(find /var/logs/httpd/my.example.Host.com/ -ctime +0 -not -name '*.gz')
do
    lsof | grep $file
    if [$? -eq 1 ]
    then
        gzip $file
    fi
done
3
user9517