web-dev-qa-db-ja.com

rotatelogsによって作成されたログをgzipする方法

Rotatelogsを使用して、毎日のApacheログをHost.<day>.<month>.<year>.access.logの形式で作成しています。完了したら、ログをgzipして別のディレクトリに移動したいと思います。どうやってするか?

更新:少しミスがありました。 logrotate-> rotatelogs

9
Poma

私は次のスクリプトを思いついた

#!/bin/sh
for file in $(ls /var/log/Apache2/*.$(date +"%y.%m.%d" --date="1 day ago").access.log); do
    gzip $file
    mv $file.gz /var/log/Apache2/archive
done;

そして次のcronエントリ

15 0    0 0 0   root    /mypath/myscript.sh
5
Poma

rotatelogsオプション-pを使用して、プログラムを使用してローテーション後のログ。 (参照してください: https://httpd.Apache.org/docs/2.4/programs/rotatelogs.html

-pプログラム

指定した場合、rotatelogsは、新しいログファイルが開かれるたびに、指定されたプログラムを実行します。新しく開いたファイルのファイル名は、プログラムの最初の引数として渡されます。ローテーション後に実行する場合、古いログファイルが2番目の引数として渡されます。 rotatelogsは、指定されたプログラムが終了するのを待たずに操作を続行し、終了時に返されるエラーコードをログに記録しません。生成されたプログラムは、rotatelogs自体と同じstdin、stdout、およびstderrを使用し、環境も継承します。

例:

CustomLog "|bin/rotatelogs -p '/path/to/compress.sh' -l /var/log/logfile.%Y.%m.%d 86400"

compress.sh

#!/bin/bash
file_to_compress="${2}"
compress_exit_code=0

if [[ "${file_to_compress}" ]]; then
    echo "Compressing ${file_to_compress} ..."
    tar --gzip --create --file "${file_to_compress}.tar.gz" "${file_to_compress}"

    compress_exit_code=${?}

    if [[ ${compress_exit_code} == 0 ]]; then
        echo "File ${file_to_compress} was compressed."
    else
        echo "Error compressing file ${file_to_compress} (tar exit code: ${compress_exit_code})."
    fi
fi

exit ${compress_exit_code}
8
Enrique Rivera

Logrotateは喜んで圧縮を行います。追加するだけです:

compress

Apacheのlogrotate設定に。圧縮を1日遅らせるきちんとしたオプションもあります。

delaycompress

それらを移動することに関しては、logrotateはあなたを助けることができませんが、このようなcronジョブは次のことができます:

@daily mv /var/log/Apache/*.gz /var/log/archive/
2
Ladadadada

私はこれを達成するためにfindとcrontabを使用しています

# crontab -e

5 0 * * */bin/find/path/to/logs/* -type f \(-mtime 1!-name "."!-name "。gz" \)-print0 | xargs -0 gzip>/dev/null 2>&1;

-mtime nファイルのデータが最後に変更されたのはn * 24時間前です。

! -name ""。* "ではない隠しファイル

! -name "圧縮されているはずの" .gz "ファイルではありません

-print0 & -0スペースまたは特殊文字がxargs-> gzipに正しくパイプされるようにします(ファイル名の安全のため)

find -execを使用できますが、| xargsはより安定しています

1
user3258557
CustomLog "|/opt/IHS/bin/rotatelogs -l /some/path/access_log.%Y.%m.%d 86400" common | gzip -9 /some/path/access_log.`date '+%Y.%m.%d'`
1
arek