Logrotate

–force 標誌對 logrotate 的行為有何改變?

  • February 11, 2019

我試圖找出為什麼 logrotate 在沒有--force標誌的情況下只旋轉文件夾中的日誌文件子集。手冊頁logrotate --force簡單地說:

告訴 logrotate 強制旋轉,即使它認為這沒有必要。有時這在向 logrotate 配置文件添加新條目後很有用,或者如果手動刪除了舊日誌文件,因為將創建新文件,並且日誌記錄將繼續正確。

我目前的理論是這與文件年齡有關,因為未旋轉的文件是由不同的應用程序寫入的,該應用程序在每次寫入時重置日誌文件 ctime。

配置/etc/logrotate.d/文件如下:

"/var/log/web_app/*.log" {
 su www-data www-data
 daily
 rotate 21
 maxsize 2G
 compress
 dateext
 copytruncate
 delaycompress
 missingok
}

logrotate.status文件顯示(僅注意cgi.log實際上已旋轉):

"/var/log/web_app/cgi.log" 2019-2-11-6:25:34
"/var/log/web_app/api.log" 2019-2-11-6:0:0
"/var/log/web_app/db.log" 2019-2-11-6:0:0

logrotate --debug報告:

rotating pattern: "/var/log/web_app/*.log"  after 1 days (21 rotations)
empty log files are rotated, log files >= 2147483648 are rotated earlier, old logs are removed
switching euid to 33 and egid to 33
considering log /var/log/web_app/api.log
 log does not need rotating
considering log /var/log/web_app/db.log
 log does not need rotating
considering log /var/log/web_app/cgi.log
 log does not need rotating
switching euid to 0 and egid to 0

head /var/log/web_app/api.log顯示此日誌文件尚未輪換(在撰寫本文時為 3 天):

2019-02-08 16:50:54,492 - general (Process1-MainThread) - INFO - Starting instance of WEB_APP

stat在同一個文件上顯示:

 File: '/var/log/web_app/api.log'
 Size: 6307        Blocks: 16         IO Block: 4096   regular file
Device: ca11h/51729d    Inode: 751580      Links: 1
Access: (0644/-rw-r--r--)  Uid: (   33/www-data)   Gid: (   33/www-data)
Access: 2019-02-11 13:17:46.639667970 +0000
Modify: 2019-02-11 09:16:43.779964966 +0000
Change: 2019-02-11 09:16:43.779964966 +0000
Birth: -

每當logrotate確定是否需要旋轉給定文件時,該--force標誌都會使其無條件回答*“是的,此文件需要旋轉”。它只是logrotate忽略了配置的旋轉觸發器 - 請注意,年齡不是唯一可能的觸發器,它的工作方式與size*相同。

**如果您知道您的輪換適用於--force,但不是沒有它,您可能希望繼續使用--debug和不使用--force。您將獲得每個已處理文件的說明。**如果您使用過--force,您將看不到解釋,因為它們會被跳過(參見findNeedRotating參考資料logrotate.c

如果日誌文件已經老化/填滿以觸發配置的旋轉條件,則該--force標誌不會使logrotate做任何它本來不會做的事情。您現在只是強制執行它 -可能會刪除最舊的文件,因此您通常希望避免重複執行它

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