Logrotate
–force 標誌對 logrotate 的行為有何改變?
我試圖找出為什麼 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做任何它本來不會做的事情。您現在只是強制執行它 -可能會刪除最舊的文件,因此您通常希望避免重複執行它。