2011-09-01 64 views
11

我有一個應用程序生成一個真正沉重的大日誌文件(每天〜800MB),因此我需要壓縮他們,但由於壓縮需要時間,我希望該logrotate壓縮文件在重新加載/發送HUP信號到應用程序之後。後postrotate腳本後logrotate壓縮文件

/var/log/myapp.log { 
    rotate 7 
    size 500M 
    compress 
    weekly 
    postrotate 
     /bin/kill -HUP `cat /var/run/myapp.pid 2>/dev/null` 2>/dev/null || true 
    endscript 
} 

壓縮是否發生在postrotate之後(這會違反直覺)? 如果沒有任何人可以告訴我,如果沒有額外的命令腳本(一個選項或一些技巧)可以做到這一點?

感謝 托馬斯

回答

11

壓縮發生前postrotate腳本並運行:從該名男子頁logrotate

定義如何處理日誌文件中的配置文件的下一部分 的/ var/log/messages中。日誌將通過每週五次輪換,然後 被刪除。在日誌文件旋轉後(但在壓縮日誌的舊版本 之前),將執行syslogd命令/ sbin/killall -HUP 。

在任何情況下,您都可以使用delaycompress選項將壓縮推遲到下一次旋轉。

+2

謝謝,我應該更仔細地閱讀man頁面......雖然這些信息也應該是compress選項的解釋下。 – Thomas

+1

@Thomas:請注意'sharedscripts'使'postrotate'腳本在壓縮後運行,如果您使用的是 – Hasturkun

+1

請注意所有讀者,根據以下答案,上述評論似乎是錯誤的@ jw-padded-to-three -chars,請參考後者。 – Thomas

19

postrotate腳本總是運行以前壓縮,即使sharedscripts生效。因此,Hasturkun對第一個答案的額外迴應是不正確的。當共享腳本生效時,在追趕之前執行的唯一壓縮是由於延遲壓縮而導致舊的未壓縮日誌左側。對於當前日誌,壓縮是總是執行運行postrotate劇本。

+0

我剛剛發現了這個。同意@Hasturkun應該修改或刪除他的評論。 – mateolargo

+2

如果這是一個評論,我可能會在不到八個月的時間內回覆 – Hasturkun

31

如果遇到任何其他人在實際搜索想要在壓縮完成後在文件上運行腳本的方法時遇到此問題,請在此處添加此信息。如上所述,使用postrotate/endscript對此沒有好處。相反,你可以使用lastaction/endscript,它完美地完成了這項工作。

+0

你是男人。至少爲我節省了30分鐘的搜索/閱讀。 –

2

@Hasturkun - 除非聲望高於50,否則不能添加評論。

要確保的是什麼logrotate的會做,要麼

  1. 測試您的配置,-d:調試其測試,但沒有做任何事情 ,和-f:強制運行
  2. 或你可以用 執行日誌輪播的-v詳細標誌

與使用sharedscript爲postrotate配置

$ logrotate -d -f <logrotate.conf file> 

顯示了以下步驟:

rotating pattern: /tmp/log/messages /tmp/log/maillog /tmp/log/cron 
... 
renaming /tmp/log/messages to /tmp/log/messages.1 
renaming /tmp/log/maillog to /tmp/log/maillog.1 
renaming /tmp/log/cron to /tmp/log/cron.1 
running postrotate script 
<kill-hup-script executed here> 
compressing log with: /bin/gzip 
compressing log with: /bin/gzip 
compressing log with: /bin/gzip 
+0

假設你指的是我的(收回的)評論,IIRC(從那以後已經有一段時間了)我在錯誤出現時檢查了logrotate源。這確實是錯誤的,行爲不受影響。無論如何,測試你的配置可能是一個好主意。 – Hasturkun