Apache-2.2

如何gzip由rotatelogs創建的日誌

  • October 6, 2017

我正在使用 rotatelogs 以 format 格式創建我的每日 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 將在每次打開新的日誌文件時執行指定的程序。新打開文件的文件名作為第一個參數傳遞給程序。如果在輪換後執行,舊的日誌文件作為第二個參數傳遞。rotatelogs 不會等待指定程序終止才繼續操作,也不會記錄終止時返回的任何錯誤程式碼。生成的程序使用與 rotatelogs 本身相同的標準輸入、標準輸出和標準錯誤,並且還繼承了環境。

例子:

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}

引用自:https://serverfault.com/questions/343776