如何让Supervisord监控Nginx进程PID?或无需Wrapper直接启动?
解决Supervisord记录Nginx PID及替代Wrapper脚本的问题
一、让Supervisord记录Nginx的PID
可以通过修改Wrapper脚本实现,核心是用exec命令将当前shell进程替换为Nginx进程,这样Supervisord监控的PID就会自动变成Nginx的PID。修改后的脚本如下:
#!/bin/env sh export LD_LIBRARY_PATH=$ENVIRONMENT_ROOT/lib/:$LD_LIBRARY_PATH exec /bin/nginx -g "daemon off;"
说明:exec会让当前shell进程被Nginx进程直接替换,而非启动子进程;同时-g "daemon off;"强制Nginx前台运行,避免原shell进程提前退出,确保Supervisord能持续监控Nginx进程。
二、直接在Supervisord配置中链式执行命令
完全可以不用Wrapper脚本,直接在配置里链式执行命令,但要注意Supervisord默认不会用shell解析&&这类链式语法,需用以下两种方式处理:
方式1:开启shell=true
配置示例:
[program:nginx] command=export LD_LIBRARY_PATH=$ENVIRONMENT_ROOT/lib/:$LD_LIBRARY_PATH && /bin/nginx -c /nginx/nginx.conf -g "daemon off;" shell=true environment=ENVIRONMENT_ROOT=/path/to/your/env # 按需传递环境变量
方式2:用sh -c包裹命令
如果不想开启shell=true,可以直接调用shell执行完整命令:
[program:nginx] command=sh -c 'export LD_LIBRARY_PATH=$ENVIRONMENT_ROOT/lib/:$LD_LIBRARY_PATH && /bin/nginx -c /nginx/nginx.conf -g "daemon off;"' environment=ENVIRONMENT_ROOT=/path/to/your/env
注意:无论哪种方式,都必须加上-g "daemon off;"让Nginx前台运行,否则Nginx会后台启动,shell进程退出后Supervisord会误判进程异常终止,触发不必要的重启。
内容的提问来源于stack exchange,提问作者Telenoobies
相关产品推荐
相关产品推荐

