背景:为了避免日志文件过大不方便查看,准备对日志切割,我用的linux系统自带的logrotate进行切割,具体切割参数请查询logrotate相关资料,下面只写出切割的配置,也是网上参考别人的文章的方法,但遇到了问题
新建文件
vi /etc/logrotate.d/nginx.log
/日志所在路径/*.log
{
daily
rotate 60
dateext
create 644 root root
postrotate
/bin/kill-HUP 反引号 cat nginx.pid路径 反引号
endscript
}
问题:1.无法控制每天切割的时间,默认都是在夜里3点多
2.日志切割之后,文件是生成了,可总是大小为0,发现nginx.pid丢失,为什么会丢失,开始思考这个问题
解决方法:经过多方查找资料
下面文件可以设置计划任务的执行时间,logrotate是每天轮转的,可以设置为24点轮转
cat /etc/anacrontab
RANDOM_DELAY=45 #最大延迟时间,改成0
START_HOURS_RANGE=3-22 #只在03到22点之间执行,改成24
1 5 cron.daily nice run-parts /etc/cron.daily
#每天都执行/etc/cront.daily/目录下的脚本文件,logrotate的脚本就在这个文件下,大家一定要自己去确认,才能真正明白
真实的延迟RANDOM_DELAY+delay。这里的延迟是5分钟,加上上面的RANDOM_DELAY,所以实际的延迟时间是5-50之间,开始时间为03-22点,那么一般就是在03:05-03:50之间执行。
如果RANDOM_DELAY=0,那么表示准确延迟5min,即03:05执行
这就是为什么总是在3点多切割的原因
2.调用nginx -s reopen用来打开日志文件,这样nginx会把新日志信息写入这个新的文件中
这样完成了日志的切割工作, 同时切割过程中没有日志的丢失。
kill -USR1 等于 nginx -s reopen
切割成功的配置
{
daily
rotate 60
dateext
create 644 root root
postrotate
if [ -f /export1/logs/nginx.pid ]; then
kill-USR1 反引号 cat nginx.pid路径 反引号
fi
endscript
}