nginx--基于crond定時服務 + logrotate實現nginx日志自動清理及備份
@TOC

背景介紹
logrotate是Linux默認自帶日志文件分割工具,結合Linux默認自帶的crond定時服務,可實現nginx、tomcat等應用日志的定時自動分割及清理,大大節省服務器磁盤空間,也方便運維人員按日期排查應用相關日志。
本文主要介紹基于crond + logrotate實現nginx應用日志自動清理及備份
需要使用root用戶操作,通過Linux自帶logrotate工具 + crond服務實現nginx日志每天定時自動分割及清理。
關于crond VS anacron 和crontab VS anacrontab區別及聯系,參考我的這篇博文
Linux-- 自帶定時服務crond VS anacron和 crontab VS anacrontab區別對比
進入正文~
一、logrotate說明
查看logrotate版本號logrotate --version
logrotate重要文件及目錄說明
/usr/sbin/logrotate 選項
–選項
-d, --debug debug模式,不執行任何操作,僅測試,方便調試
-f, --force 強制轉存文件
-m, --mail=command 發送日志到指定郵箱
-s, --state=statefile 狀態記錄文件
-v, --verbose 顯示轉存過程信息
-l, --log=STRING 日志文件
二、crond定時任務配置
2.1、查看crond狀態
查看crond服務運行狀態
systemctl status crond.service
running表示運行狀態~
查看crond服務后臺進程
ps -ef|grep crond
可以看到crond的守護進程是通過/usr/sbin/crond -n來實現的。
crond的后臺進程,會每分鐘去加載是否有要執行的定時任務。
crond服務其他常用命令
systemctl status crond.service
systemctl start crond.service
systemctl restart crond.service
systemctl stop crond.service
systemctl reload crond.service
2.2、配置crond定時任務
(1)配置/etc/anacrontab
現在比較新版的Linux操作系統,比如Linux CentOS6.0+后,都默認自帶anacron服務及/etc/anacrontab,如果操作系統比較老或者不存在/etc/anacrontab,則通過/etc/crontab配置crond的定時任務,系統一般默認已配置按日、周、月三種定時任務方案
**–說明:**1、其中RANDOM_DELAY=45表示隨機延遲0~45分鐘,日方案中delay對應的5則表示強制延遲5分鐘,到達定時任務的指定日期后,還需要延遲一段時間再執行,總延遲時間(分鐘)= 隨機延遲RANDOM_DELAY + 強制延遲 delay
(2)配置/etc/crontab
配置/etc/anacrontab后,不需要再重復配置/etc/crontab
若操作系統不存在/etc/anacrontab則需要配置/etc/crontab
編輯配置vi /etc/crontab
–說明:
所標記的配置內容格式依次為: cron表達式 使用哪個用戶執行 要執行的命令
三、配置logrotate指令腳本
logrotate日志管理要執行的相關指令文件一般放在/etc/logrotate.d目錄下
編輯vi /etc/logrotate.d/nginx
#logrotate nginx分割方案 /usr/nginx/logs/nginx/*.log { #賦予root權限,否則報權限問題insecure permissions su root root #每天滾動 daily #如果日志丟失,不報錯繼續滾動下一個日志 missingok #使用當前日期作為命令格式,如:host.access.log-20210101.log dateext #保留最近52次滾動的日志 rotate 52 #使用gzip壓縮日志文件為gz,節省空間 compress #delaycompress和compress一起使用時,轉存的日志文件到下一次轉存時才壓縮 delaycompress #日志文件為空不進行滾動 notifempty #轉存日志文件,使用指定的文件模式640創建新的日志文件,歸屬nginx nginx用戶 create 640 nginx nginx #運行postrotate的腳本 sharedscripts postrotate if [ -f /usr/nginx/nginx/nginx.pid ]; then kill -USER1 `cat /usr/nginx/nginx/nginx.pid` fi endscript }
–說明:
注意/usr/nginx/nginx/nginx.pid,要改成自己nginx的PID進程文件
查看PID配置路徑:cat /etc/nginx/nginx.conf
四、驗證crond + logrotate
4.1、驗證說明
雖然crond服務每分鐘會加載到/etc/anacrontab中配置的日方案、周方案、月方案對應的定時任務指令,但是/etc/anacrontab中配置的定時任務最小時間單位是日,不可能等到第二天看結果后才能驗證配置是否正確吧,所以需要想辦法馬上驗證crond + logrotate`配置是否正確。
這里以/etc/anacrontab中配置的日方案 中配置為例,其中 nice run-parts /etc/cron.daily 加載順序為:
(1)加載/etc/cron.daily目錄下的可執行文件并執行
(2) 加載到/etc/cron.daily/logrotate并執行
(3)執行/etc/cron.daily/logrotate時會加載到文件中指定的/etc/logrotate.conf主配置文件
(4)主配置文件/etc/logrotate.conf中又include包含了外部/etc/logrotate.d目錄下的所有子配置文件
(5)而/etc/logroate.d目錄下,存放的是Linux相關用戶的日志管理指令文件,例如nginx用戶的日志清理及備份指令文件等。
(6)總結來說,手動驗證crond +logrotate配置是否正確的命令為:
/usr/sbin/logrotate -f /etc/logrotate.conf
進入手動驗證測試~
4.2、驗證測試
(1)debug模式驗證
debug模式,不執行任何操作,也不會清理和備份日志文件,僅測試,方便調試
/usr/sbin/logrotate -d -l debug.log /etc/logrotate.conf
查看輸出日志問加你debug.log定位關鍵字nginx
– 說明
/etc/logrotate/nginx歸屬要設置為root用戶chown root:root /etc/logrotate/nginx,否則報錯:
Ignoring nginx because the file owner is wrong (should be root).
(2)強制驗證
強制驗證 -f表示強制轉存日志文件
/usr/sbin/logrotate -f /etc/logrotate.d/nginx
如上圖,強制驗證成功,說明配置的crond + logrotate實現nginx日志清理及備份功能正常~
Nginx
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。