nginx日志切割两方案
一、基于logrotate
[root@localhost logrotate.d]# pwd
/etc/logrotate.d
[root@localhost logrotate.d]# cat nginx
/application/nginx/logs/blogs/blogs_access.log /application/nginx/logs/blogs/blogs_error.log {
daily
rotate 15
minsize 10M
sharedscripts
postrotate
/usr/local/server/nginx/sbin/nginx -s reload
endscript
}
二、直接基于crond
理想的做法就是根据每天进行区分日志文件,如host.access_20120815.log等, 日志保留最近10天的, 超过10天的日志文件则进行删除.
根据上需求进行nginx的日志切割.
1. 脚本nginxcutlogs.sh
- [devwqs@rehserver bin]$ more nginxcutlogs.sh
- #!/bin/bash
- # 1. move host.access.log to host.access_20120821.log
- logs_path=“/home/devwqs/nginx/logs/”
- mv ${logs_path}host.access.log ${logs_path}host.access_$(date -d “yesterday” +“%Y%m%d”).log
- kill -USR1
cat /home/devwqs/nginx/logs/nginx.pid
- # 2. delete all host.access_2012xxxx.log which overtime 10 days
- find ${logs_path} -name ‘host.*.log’ -type f -mtime +10 -exec rm {} \;
2. 使用crontab进行把上述脚本发布到定时任务
每天凌晨0.01分定时执行nginxcutlogs:
- #1. 编辑devwqs的crontab定时任务
- [devwqs@rehserver bin]$ crontab –e
- 1 0 * * * sh /home/devwqs/bin/nginxcutlogs.sh
- #2. 重新启动crontab
- [devwqs@rehserver bin]
- systemctl restart cron
- Stopping crond: [ OK ]
- Starting crond: [ OK ]
继续阅读