nohup / screen之后,Python进程在SSH注销时挂起

时间:2014-05-24 18:00:42

标签: python linux bash ssh

我有一个通过Blue Host的远程服务器,用于运行基于Twisted for Python的服务器。我所拥有的唯一访问权限是通过SSH,因此为了在我注销后保持Python运行,我尝试使用nohup python server.py &screen -dm python server.py,为每个访问获得相同的结果。一切正常,直到我退出SSH - 即使Python按预期在后台运行,一旦我注销,我的客户端就无法再与服务器通信了。奇怪的是,如果我通过SSH重新登录并使用ps aux检查正在运行的进程,我会看到Python正在运行,我的客户端可以再次与服务器成功通信。一旦我重新登录,即使我没有输入任何内容,一切都按预期工作。但是,当然,一旦我退出,就好像服务器已经消失了。

我已经联系了对托管服务的支持,以防他们结束时有些奇怪,但希望这可以在我的最终解决。

编辑:看起来Blue Host不希望我在没有购买VPS升级的情况下做服务器,所以看起来这是个大问题。

编辑2:好的,所以如果有人遇到类似的问题,这就是主要问题的结果。我在原来的描述中弄错了;我能够连接到服务器,但我立即开始被发现是MySQL错误。我想尝试连接到没有活动连接的localhost数据库会以某种方式导致问题,所以我改为使用MySQL连接命令连接到我站点的IP地址,即使它与服务器的IP相同。就我的主要问题而言,这似乎就是伎俩。

1 个答案:

答案 0 :(得分:3)

请勿使用此方法来保持服​​务器进程正常运行。而是尝试使用supervisor(apt-get install supervisor)。它允许您守护进程,以及停止/重启等的能力。

这是一个示例配置条目(/etc/supervisor/supervisord.conf):

[program:my_server]
command=python /path/to/server/server.py
directory=/path/to/server/
autostart=true
autorestart=true
stdout_logfile=/var/log/server.log
stderr_logfile=/var/log/server_error.log
user=your_linux_user_name

编辑配置后,执行

sudo service supervisor stop
sudo service supervisor start #need to do this - doing a `restart` doesn't reload the config file!

您的服务器现在应该正常运行。您可以通过sudo supervisorctl

管理其生命周期