- 定義由logrotate處理的文件類別,系統 CentOS7.6_1810
- 示例
- vim /etc/logrotate.d/nginx
- logrotate /etc/logrotate.d/nginx
- logrotate -f /etc/logrotate.d/nginx
- 相關文件
- file /etc/cron.daily/logrotate
- file /etc/logrotate.conf
- file /etc/anacrontab
- cat /var/lib/logrotate/logrotate.status
[root@yiis-ali logs]# cat /etc/logrotate.d/nginx
/data/nginx/logs/*.log {
daily
missingok
rotate 7
dateext
compress
delaycompress
notifempty
create 640 root root
sharedscripts
postrotate
if [ -f /data/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /data/nginx/logs/nginx.pid`
fi
endscript
}
- Logrotate的疑問
- shared scripts的作用是什麼 ?
(shared scripts的作用是在所有的日誌文件都輪轉完畢後統一執行一次腳本。如果沒有配置這條指令,那麼每個日誌文件輪轉完畢後都會執行一次腳本)
- rotate和maxage的區別是什麼 ?
(它們都是用來控制保存多少日誌文件的,區別在於rotate是以個數爲單位的,而maxage是以天數爲單位的。如果我們是以按天來輪轉日誌,那麼二者的差別就不大了)
- 爲什麼生成日誌的時間是凌晨四五點 ?
(Logrotate是基於CRON運行,時間是由CRON控制的。具體可以查詢CRON的配置文件
/etc/crontab | /etc/anacrontab,可手動改成如23:59等時間執行)
- 如何告訴應用程序重新打開日誌文件 ?
(以Nginx爲例,是通過postrotate指令發送USR1信號來通知Nginx重新打開日誌文件的。但是其他的應用程序不一定遵循這樣的約定,比如說MySQL是通過flush-logs來重新打開日誌文件的。更有甚者,有些應用程序就壓根沒有提供類似的方法,此時如果想重新打開日誌文件,就必須重啓服務,但爲了高可用性,這往往不能接受。還好Logrotate提供了一個名爲copytruncate的指令,此方法採用的是先拷貝再清空的方式,整個過程中日誌文件的操作句柄沒有發生改變,所以不需要通知應用程序重新打開日誌文件,但是需要注意的是,在拷貝和清空之間有一個時間差,所以可能會丟失部分日誌數據)