Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 龙卷风不';不要在管理器中干净地重新启动_Python_Tornado_Supervisord - Fatal编程技术网

Python 龙卷风不';不要在管理器中干净地重新启动

Python 龙卷风不';不要在管理器中干净地重新启动,python,tornado,supervisord,Python,Tornado,Supervisord,我正在使用tornado运行一个flask应用程序,我有一个shell脚本,它做了一些工作,然后运行这个应用程序 #!/usr/bin/env bash some_work more_work python /usr/share/theapp/theapp.py 我使用主管来管理这个小脚本。启动工作正常(sudo-supervisortl start theapp.sh),但当我想重新启动时,python子进程不会退出并挂起,占用了端口并阻止再次启动。我已经尝试添加陷阱,以确保在脚本被主管停止

我正在使用tornado运行一个flask应用程序,我有一个shell脚本,它做了一些工作,然后运行这个应用程序

#!/usr/bin/env bash
some_work
more_work
python /usr/share/theapp/theapp.py

我使用主管来管理这个小脚本。启动工作正常(
sudo-supervisortl start theapp.sh
),但当我想重新启动时,python子进程不会退出并挂起,占用了端口并阻止再次启动。我已经尝试添加陷阱,以确保在脚本被主管停止时python代码确实停止,但这并没有起作用。我曾尝试将tornado切换到gevent的wsgi服务器,但也遇到了同样的问题。我应该如何编写这个小脚本?

我在supervisord和uwsgi方面也遇到过类似的问题,但它可能对Tornado也有效。问题在于Tornado服务期望重新启动的信号。 supervisord发送的默认信号是SIG_TERM(查看)。我不确定Tornado期望的是什么,但您可以在supervisord配置中尝试更多选项,如:

# /etc/supervisor.d/myprogram.ini
# http://supervisord.org/configuration.html#program-x-section-values
[program:myprogram]
command=/path/to/script/
....
stopsignal=INT


术语信号只发送到bash脚本
theapp.sh
,python进程从未接收到。您可以尝试supevisor配置的程序部分中的
stopasgroup
选项,该选项与bash(和其他shell)处理信号的方式更兼容[1]


[1]

或者,如果shell脚本只执行预操作,而在“real”命令之后不执行任何操作,则可以将最后一行替换为

exec python /usr/share/theapp/theapp.py

这将用python进程取代shell进程,因此python进程可以直接获得信号,而且还有一个额外的好处,那就是您不需要一直运行空闲的shell进程。

嘿,请注意:supervisord一直发送SIGKILL,所以我放弃了它,转而使用Ubuntu的upstart,它能正确处理信号。
stopasgroup=true
在Tornado应用程序(pilbox)中为我工作
exec python /usr/share/theapp/theapp.py