2011年3月4日 星期五

apache2 rotate log 的注意事項

apache2 沒有收到 SIGHUP 就關掉 log 檔重開這回事, 所以若手動改 log 檔, apache2 仍會寫入同一個檔案。Ubuntu 上 logrotate 的作法是, 在 rotate apache2 的 log 檔後, 會要求 apache2 reload config, 藉此讓 apache2 關掉重開 log 檔, 好讀到新的檔名。可從 logrotate 設定 apache2 的內容看出這件事 (/etc/logrotate.d/apache2):
/var/log/apache2/*.log {
        weekly
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
                        /etc/init.d/apache2 reload > /dev/null
                fi
        endscript
}

但若自己架的一些 Web 服務需要「暖機」的程序的話 (比方說在 CGI process 的記憶體內暫存一些前處理的資料), logrotate 作法會拖慢 log rotation 後第一批連進來的使用者。

apache2 有提供 piped logs 來避免 apache2 reload。概念是透過外部程式來 rotate log, 而 apache2 也會知道發生 log rotation, 藉此重開檔案。官網有提到, 除搭配內建的 rotatelogs 外, cronolog 是更彈性的選擇, 在《Apache log rotate 的另一個選擇:cronolog》有詳細的教學。另外要注意的是, cronolog 不像 logrotate 有提供設權限的機制, 自己要另外跑個 crontab 將群組改為 adm, 權限設成 640。

沒有留言:

張貼留言

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...