目錄
- logrotate日志切割(轉儲)
- 背景
- 日志切割配置文件/etc/logrotate.conf
- 設置定時任務
- logrotate日志切割報錯 文件不再同一個用戶組下
- 總結
logrotate日志切割(轉儲)
背景
系統每天凌晨1:59查看/data/nginx/log日志文件的大小,如果小于10M,不做任何處理,如果大于等于10M,觸發日志轉儲,
轉儲后/data/nginx/log的大小為0,并且會在/data/nginx/logs/下生成一個通過gzip壓縮的以當前日期命名的.gz文件
注意:該配置算不上是日志切割,因為當日志文件為25M時,也會歸檔為一個文件,并不是以10M為單位進行分割,只能稱為日志轉儲。
日志切割配置文件/etc/logrotate.conf
cat > /etc/logrotate.conf << EOF /data/nginx/log { ? ? missingok ? ? notifempty ? ? create 0640 root root ? ? compress ? ? dateext ? ? olddir /data/nginx/logs/ ? ? rotate 50 ? ? size 10M } EOF
相關解釋:
/data/nginx/log ? ? ? ? ? ? ? ?#表示要做切割的日志文件名 missingok ? ? ? ? ? ? ? ? ? ? ?#在日志輪循期間,任何錯誤將被忽略,例如“文件無法找到”之類的錯誤 notifempty ? ? ? ? ? ? ? ? ? ? #如果日志文件為空,輪循不會進行 create 0640 root root ? ?? ? ? #以指定的權限創建全新的日志文件 compress ? ? ? ? ? ? ? ? ? ? ? #在輪循任務完成后,使用gzip壓縮歸檔文件 dateext ? ? ? ? ? ? ? ? ? ? ? ?#使用當前日期作為歸檔文件的命名格式 olddir /data/nginx/logs/ ? ? ? #指定歸檔文件存放到/data/nginx/logs/目錄下,/data/nginx/logs/需提前創建 rotate 50 ? ? ? ? ? ? ? ? ? ? ?#最多存儲50個歸檔文件,當生成第51個歸檔文件時,第1個會被刪除 size 10M ? ? ? ? ? ? ? ? ? ? ? #當監聽文件達到10M時進行切割歸檔
設置定時任務
echo "59 01 * * * /usr/sbin/logrotate -v /etc/logrotate.conf &> /var/log/logrotate.log" >> /var/spool/cron/root crond start
logrotate日志切割報錯 文件不再同一個用戶組下
分割日志時報錯:
:error: skipping "/var/log/nginx/test.access.log" because parent
directory has insecure permissions (It's world writable or writable by
group which is not "root") Set "su" directive in config file to tell
logrotate which user/group should be used for rotation.
xx 文件所屬用戶
添加“su root xx”到/etc/logrotate.d/nginx文件中即可
如下:
/var/log/nginx/*.log { su root public daily missingok rotate 52 compress delaycompress notifempty #ifempty create 0640 www-data adm sharedscripts postrotate [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid` endscript }
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持。