logrotate 真是好東西

  • 定義由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的指令,此方法採用的是先拷貝再清空的方式,整個過程中日誌文件的操作句柄沒有發生改變,所以不需要通知應用程序重新打開日誌文件,但是需要注意的是,在拷貝和清空之間有一個時間差,所以可能會丟失部分日誌數據)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章