我们在多台服务器上使用Nginx,目前正在运行1.11.10。
我正在创建一个Ansible脚本来部署一些配置更改。该脚本将新配置文件复制到服务器,然后发出命令以重新加载Nginx配置。
有什么方法可以确认文件已成功重新加载?在命令行中使用“systemctl status nginx”只会告诉我服务器的状态以及上次重新启动时的详细信息,而不是上次重新加载配置的时间。
非常感谢您提供任何信息或帮助。
答案 0 :(得分:0)
nginx -s reload
返回成功(echo $?)告诉我们nginx加载配置是否成功,但现在最新的配置可能不是每个请求的worker,因为可能与旧工作者的某些连接仍然没有完成,在此时间,系统具有配置的双工作流程。
主工作者模式
主进程加载新配置并使用它生成新的工作进程,然后在完成已存在的连接后停止旧工作进程
让我们试试worker_processes 2;
✗ ./sbin/nginx
✗ ps aux|grep nginx
larryhe 2572 Ss 2:43PM 0:00.00 nginx: master process ./sbin/nginx
larryhe 2575 S 2:43PM 0:00.00 nginx: worker process
larryhe 2573 S 2:43PM 0:00.00 nginx: worker process
✗ ./sbin/nginx -s reload
✗ ps aux|grep nginx
larryhe 2572 Ss 2:43PM 0:00.01 nginx: master process ./sbin/nginx
larryhe 2706 S 2:44PM 0:00.00 nginx: worker process
larryhe 2705 S 2:44PM 0:00.00 nginx: worker process
第二列是pid
,我们可以看到reload
之前和之后工作进程的pid不同。
单主模式
主进程在流程中应用最新配置而不重新启动,如果nginx -s reload
返回成功,则已完成。