错误 PID:带有软件集合 Python 的 Supervisord 程序

错误 PID:带有软件集合 Python 的 Supervisord 程序

我有一个 Python 服务器,必须由启用了软件集合的环境执行。supervisord配置文件如下所示:

[program:xxx]
command=/usr/bin/scl enable rh-python35 -- /myenv/bin/python server.py
stdout_logfile=/var/log/xxx.log
redirect_stderr=true

程序启动正常,但supervisord认为该scl进程是实际进程,但Python 服务器有不同的 PID当到达 SIGTERM(停止、重启等)时,scl进程终止,但 Python 服务器继续运行。

可以让我的服务器写入一个 PID 文件,然后使用pidproxy提供的程序supervisord,如下所述:

http://supervisord.org/subprocess.html#pidproxy-program

然后,如所述,supervisord将向正确的 PID 发送信号。但是,如果可能的话,我更愿意避免更改服务器代码来创建 PID 文件。

问题:还有其他设置方法吗?

请注意,直接执行python软件集合内的可执行文件不起作用:

[user@xxx gpsengine]$ /opt/rh/rh-python35/root/bin/python -V
/opt/rh/rh-python35/root/bin/python: error while loading shared libraries: libpython3.5m.so.rh-python35-1.0: cannot open shared object file: No such file or directory

其他详情:

  • Centos 7

编辑:除此之外,还有一种pidproxy涉及中间 shell 脚本的方法。此邮件列表条目描述了一个enable 脚本(相对于scl enable 命令):

https://www.redhat.com/archives/sclorg/2016-June/msg00008.html

它可以在 shell 脚本中使用,如下所示:

exec 2>&1
test -f /opt/rh/rh-python35/enable && source /opt/rh/rh-python35/enable
exec /myenv/bin/python server.py

由于exec替换了shell进程,supervisord程序配置就可以指向这个shell脚本作为命令。

相关内容