Nginx被log-rotate杀死后如何重启?
How does Nginx restart after being killed by log-rotate?
在/etc/logrotate.d/nginx
中我发现:
/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
这是我很好奇的 postrotate
命令。
我认为这意味着一旦日志已成功旋转,它会终止 nginx 进程。
我知道重启nginx时会创建新日志。
我想不通的是,进程是如何自动重启的,是否中断了网页服务?
logrotate
运行 作为每日 cron 作业将重命名 /var/log/nginx/*.log
中的日志文件。
之后nginx就不能输出error log和access log到原始日志文件了。 (更多细节,请参考@mata在这个回答下的评论。)
要解决这个问题,USR1
信号应该发送到 nginx 以重新打开日志文件。
所以postrotate
发送USR1
给nginx master,这个信号不是杀nginx。
有关使用信号控制 nginx 的更多详细信息,请参阅 this document。
在/etc/logrotate.d/nginx
中我发现:
/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
这是我很好奇的 postrotate
命令。
我认为这意味着一旦日志已成功旋转,它会终止 nginx 进程。
我知道重启nginx时会创建新日志。
我想不通的是,进程是如何自动重启的,是否中断了网页服务?
logrotate
运行 作为每日 cron 作业将重命名 /var/log/nginx/*.log
中的日志文件。
之后nginx就不能输出error log和access log到原始日志文件了。 (更多细节,请参考@mata在这个回答下的评论。)
要解决这个问题,USR1
信号应该发送到 nginx 以重新打开日志文件。
所以postrotate
发送USR1
给nginx master,这个信号不是杀nginx。
有关使用信号控制 nginx 的更多详细信息,请参阅 this document。