因为nginx存放的日志文件逐渐增大,导致日后想察看某个时间的日志的时候,打开巨大文件所带来的性能代价和时间定位查找麻烦,因此需要对日志文件按照时间和频率进行切割。切割过程如下:
- 创建当前时间目录,比如年/月目录
- 然后将当前指定的日志,剪切到该创建好的目录下
- 重启nginx服务,重新生成0kb大小的新日志文件
- 通过计划任务,周期性执行以上切割日志,重新生成日志的操作就能达到既让日志文件保持一定大小而且又能按照指定的时间格式和目录进行存放。方面查询的便利和文件打开的快速。
目前网上也有一些Nginx日志切割脚本,但是还是有用户反映网上Nginx日志切割脚本有问题,我感觉一般是因为脚本中的参数设置问题,或者是crontab中的设置问题。
如果是lnmp0.5/0.6/0.7/0.8/0.9通用,用户可以仅修改log_files_name后面的要切割的日志文件名就直接使用。
脚本主要参数:
#设置nginx日志文件目录路径
log_files_path=”/home/wwwlogs/”
#日志文件将会存放到/home/wwwlogs/年/月/日志文件名_年月日.log
log_files_dir=${log_files_path}$(date -d “yesterday” +”%Y”)/$(date -d “yesterday” +”%m”)
#设置要切割的日志的名字,如果日志目录下面的日志文件名为vpser.net.log,则填写vpser.net,每个日志名用空格分隔
log_files_name=(access vpser.net licess)
#设置nginx文件的位置
nginx_sbin=”/usr/local/nginx/sbin/nginx”
#设置日志保存的时间,天
save_days=30
如果是非lnmp一键安装包用户可以通过修改上述参数适应你的nginx环境。
将nginx日志切割脚本下载到/root/下面。再添加自动执行,执行:crontab -e
输入:00 00 * * * /bin/bash /root/cut_nginx_logs.sh 每天0点整开始切割脚本。
上面的意思可以写成如下表格形式: *表示通配符表示每天或者说任意一天的意思
如果想撤消这个任务该怎么做???这里有个选项是-r,直接输入crontab -r:
编写完这个计划任务以后,还是要检查一下这个任务是否在启动,输入ps -le | grep cron:
S表示确实是启动的,如果没有启动可以输入:/etc/rc.d/init.d/cron start即可。。。。
同样crontab文件(也就是输入crontab -e后出现要编辑一个文件)建立好后放在/var/spool/cron目录里面.