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