【问题标题】:Python process suspends on SSH logout after nohup/screen在 nohup/screen 之后,Python 进程在 SSH 注销时挂起
【发布时间】:2014-05-25 23:47:21
【问题描述】:

我通过 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 相同。就我的主要问题而言,这似乎起到了作用。

【问题讨论】:

  • 您的客户端通常如何与服务器通信?失败时以何种方式失败?您会收到什么样的错误消息?
  • 客户端和服务器通过套接字进行通信。当它失败时,客户端根本没有收到来自服务器的响应,这最终成为我收到的唯一错误消息 - 无法访问服务器。

标签: python linux bash ssh


【解决方案1】:

不要使用这种方法来保持服​​务器进程运行。而是尝试使用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管理它的生命周期

【讨论】:

  • 现在试图让它工作 - 提供给我的系统没有 sudo 或不希望我使用它,所以我试图找到解决方法或获得 sudo工作
  • 它是什么操作系统?红色的帽子? Ubuntu?森托斯? Debian?
  • 也试图找出答案。我现在能找到的最详细信息来自 uname -s,它告诉我 Linux。
  • 那可能不是 Ubuntu。试试cat /etc/*release*
猜你喜欢
  • 2017-07-19
  • 1970-01-01
  • 2019-03-13
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 2020-06-08
  • 2013-12-22
  • 1970-01-01
相关资源
最近更新 更多