nginx运行很久后,发现access.log日志奇大无比。。。但是显示日志又是必要的,所以需要日志分割,思路就是写个脚本,脚本的任务就是备份日志,然后把脚本加到定时任务中执行。
1. 编写脚本 cut_logs.sh
#!/bin/bash
root_path=/usr/local/nginx/logs
backup_path=$root_path/backup
origin_file=(access.log error.log)
backup_file=(access_$(date +%Y%m%d -d 'yesterday').log error_$(date +%Y%m%d -d 'yesterday').log)
[ -d $backup_path ] || mkdir -p $backup_path
for(( i=0;i<${#origin_file[@]};i++))
do
cp $root_path/${origin_file[$i]} $backup_path/${backup_file[$i]} && echo > $root_path/${origin_file[$i]}
done
find $backup_path -mtime +30 | xargs rm -f #删除30天之前的日志
2.加入到定时任务中
- [root@iZuf68bpfv23id0nbs3yvdZ conf]# crontab -e
- 40 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh"
0 0 * * * /usr/local/nginx/conf/cut_logs.sh #每天凌晨执行脚本
3.保存之后定时任务就会生效,日志切割到此结束。
这里记录一下定时任务执行shell文件失败的排查思路。大家可以直接跳过
定时任务日志默认保存在/var/log/cron,可以使用命令查看一下 ls /var/log/cron*
[root@iZuf68bpfv23id0nbs3yvdZ conf]# ls /var/log/cron*
/var/log/cron /var/log/cron-20191208 /var/log/cron-20191215 /var/log/cron-20191222 /var/log/cron-20191229
vim /var/log/cron后发现有这么一段(root) MAIL (mailed 113 bytes of output but got status 0x004b#012),大致就是错误信息邮寄给你的时候发生错误了,那我们应该怎么查询定时任务里的shell脚本错误信息呢?其实很简单,在脚本里把日志信息手动输出即可,如下
0 0 * * * /usr/local/nginx/conf/cut_logs.sh > /usr/local/nginx/conf/cut_logs.log 2>&1
在cut_logs.log即可查看错误信息。