Rotatelogsを使用して、毎日のApacheログをHost.<day>.<month>.<year>.access.log
の形式で作成しています。完了したら、ログをgzipして別のディレクトリに移動したいと思います。どうやってするか?
更新:少しミスがありました。 logrotate
-> rotatelogs
私は次のスクリプトを思いついた
#!/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
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}
Logrotateは喜んで圧縮を行います。追加するだけです:
compress
Apacheのlogrotate設定に。圧縮を1日遅らせるきちんとしたオプションもあります。
delaycompress
それらを移動することに関しては、logrotateはあなたを助けることができませんが、このようなcronジョブは次のことができます:
@daily mv /var/log/Apache/*.gz /var/log/archive/
私はこれを達成するために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
はより安定しています
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'`