【发布时间】:2012-11-24 08:43:40
【问题描述】:
我有一个长时间运行的 python 程序,我试图在远程服务器上运行。
我查看了"How to keep processes running after ending ssh session?"、" How to start process via SSH, so it keeps running?"、"Run a persistent process via ssh" 和其他一些主题,但它们似乎没有帮助。
我尝试使用screen(通过分离包含后台进程的screen)和nohup 运行python 进程,但是在这两种情况下,当我退出ssh 会话时(其中--我不确定这是否重要——使用 X11 转发运行,因为 python 程序正在创建一些图形),ssh 会话挂起。
即使我将stdin、stdout、stdout 从/到/dev/null 重定向,ssh 进程也会挂起。
终止 ssh 会话会终止 python 进程。当我终止 ssh 时,远程服务器上打印以下错误消息:g_dbus_connection_real_closed: Remote peer vanished with error: Underlying GIOStream returned 0 bytes on an async read (g-io-error-quark, 0). Exiting.
此外,我实际上不想将stdout 或stderr 重定向到/dev/null,因为我想将它们重定向到日志文件。所以我没有尝试将python进程作为守护进程运行。 (也许日志发送到stdout很糟糕,我猜......)
我应该怎么做,这样我才能:(1) 注销后保持进程运行,(2) 将stdout/stderr 重定向到日志文件?
(“有效”的一件事是在后台暂停然后重新运行 ssh 进程 [挂起后],但是如果我想关闭我的计算机怎么办?)
【问题讨论】:
-
如果您的程序确实需要 X11 服务器,您可以考虑使用
xpra而不是screen。 -
ssh 挂起,但是您尝试持久化的程序会发生什么情况?
-
当 ssh 挂起时,什么也没有发生。如果我杀死 ssh(通过
Ctrl-c或~.),python 程序也会死掉。我会调查xpra。
标签: linux unix ssh gnu-screen