通过ssh运行持久进程

时间:2012-02-11 02:42:26

标签: linux unix ssh

我正在尝试通过ssh启动测试服务器但是一旦我从ssh断开连接它总是会死掉。

有没有办法启动进程(运行服务器),以便在我的ssh会话结束时不会死?

5 个答案:

答案 0 :(得分:19)

作为nohup的替代方案,您可以在终端多路复用器中运行远程应用程序,例如GNU screentmux

使用这些工具可以轻松地从其他主机重新连接到会话,这意味着您可以在离开工作之前进行长时间构建或下载,并在回家后检查其状态。例如。我发现在非常远程(在不同国家/地区)的服务器上进行开发工作时,这对我和他们之间的连接不可靠非常有用,如果连接断开,我可以简单地重新连接并继续而不会丢失任何状态。

答案 1 :(得分:4)

是;您可以使用the nohup command吞下挂断SSH会话时发送到程序的HUP(“挂断”)信号。

或者,如果您自己编写服务器,可以将其编码为register a handler以获取HUP信号,并将其吞入程序内(而不是使用外部nohup程序执行相同)。

答案 2 :(得分:4)

除了其他回复之外,您可以通过batch(或at)启动测试服务器,但是Brian answered应该调用daemon

您可以将-f选项传递给ssh

答案 3 :(得分:3)

作为nohupscreen等的替代方案。您可以修改服务器以调用daemon将其从终端分离。这是为linux编写服务的惯用方法。

另见daemon(3)

答案 4 :(得分:3)

如果您正在通过SSH连接到具有systemd的Linux发行版,则可以使用systemd-run在后​​台启动流程(在systemd'条款中,"瞬态服务&# 34)。例如,假设你想在后台ping一些东西:

systemd-run --unit=pinger ping 10.8.178.3

使用nohup运行进程时,系统会获得的好处是systemd将跟踪进程及其子进程,保留日志,记住退出代码并允许您干净地终止进程和它的所有孩子。例子:

查看状态和输出的最后几行:

systemctl status pinger

流输出:

journalctl -xfu pinger

杀:

systemctl kill pinger