最简单的实现是,可以按如下方式实现 NGINX 日志轮换:
mv access.log access.log.0
kill -USR1 `cat master.nginx.pid`
我的问题。这里是否存在并发问题?我的意思是,如果 NGINX 在两个操作 (1) 文件重命名和 (2) 收到重新加载命令之间写入日志条目,那么某些日志条目是否会丢失?
答案1
在发送 USR1 信号之前等待 15 秒,您将看到 *access.log.0" 仍在使用。发生这种情况是因为日志是基于 inode 而不是文件名打开以进行写访问的。因此,使用此技术是并发安全的:mv + USR1