1. 程式人生 > 其它 >使用logrotate定期切割nginx日誌

使用logrotate定期切割nginx日誌

nginx環境

  • nginx安裝位置:/usr/local/nginx

按天切割nginx日誌的配置

vim /etc/logrotate.d/nginx

/usr/local/nginx/logs/*.log {
    daily
    size 10m
    minsize 10m
    rotate 30
    missingok
    notifempty
    compress
    nodelaycompress
    copytruncate
    dateext
    dateformat -%Y-%m-%d
    dateyesterday
    postrotate
        if [ -f /usr/local/nginx/logs/nginx.pid ];then
            kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
        fi
    endscript
}

配置說明:

  • 按天切割
  • 檔案大小為10M的時候才切割
  • 保留最近30天的日誌檔案
  • 切割中遇到日誌錯誤忽略
  • 日誌如果為空將不進行切割和壓縮
  • 以gzip壓縮
  • 不要將剛切割後的日誌檔案放到下個迴圈中進行壓縮
  • 切割後的日誌檔案新增副檔名
  • 副檔名為年月日
  • 副檔名的年月日為昨天的日期
  • 在切割後執行 postrotate/endscript之間的命令,此處為熱重啟nginx

使用crontab定時執行logrotate

因為系統預設的logrotate規則比較奇葩,所以直接刪了預設規則,自行定義。

  1. rm -rf /etc/cron.daily/logrotate
  2. 使用crontab -e新建crontab規則:00 00 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx
    ,這樣每天凌晨0點0分就會執行nginx日誌切割。注意確認logrotate命令的位置。