之前写过这篇文章,但是由于上次的数据丢失故障这篇日志没有了。于是我又重新写了这个脚本,再次贴出来,给大家。
#!/bin/bash logs_path=/home/logs/www/ arch_log_path=${logs_path}$(date -d "yesterday" +"%Y%m/%d")/ mkdir -p ${arch_log_path} cd ${logs_path} for i in `ls *.access.log` do tar zcf ${i}.tar.gz -C ${logs_path} ${i} mv ${i}.tar.gz ${arch_log_path} rm -rf ${i} done kill -USR1 `cat /usr/local/nginx/nginx.pid`
使用时注意修改logs_path为你自己的Nginx访问日志目录。我的Nginx是按照虚拟主机分列访问日志的,每个日志文件的格式如localhost.access.log,该脚本会匹配日志目录下的所有*.access.log文件,打包压缩后移动到 年月/日 目录下面。大家可以根据自己需要再行调整。设置成功后在crontab里面加入定时计划。
sudo crontab -e
启动VI编辑器,输入以下内容:
0 0 * * * /path/to/cut_nginx_log.sh
其中最后一部分请修改成你的切割脚本所在的路径。定时器设定在每天0时归档昨天的日志。