通过ssh运行一个持久化进程

我试图通过ssh启动一个testing服务器,但是一旦我从ssh断开,它总是死掉。

有没有办法启动一个进程(运行服务器),所以它不会死在我的SSH会话结束?

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

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

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

或者,如果您自己编写服务器,则可以对其进行编码,以便为HUP信号注册一个处理程序 ,并将其吞入程序(而不是使用外部nohup程序)。

除了其他答复之外,你可以通过批处理 (或者)启动你的测试服务器at但是Brian回答你应该调用daemon

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

作为nohupscreen等的替代方案, 你可以修改你的服务器来调用daemon把它从终端上分离出来。 这是为linux编写服务的惯用方式。

另请参阅daemon(3)

如果您正在使用systemd-run的Linux发行版进行SSH连接,则可以使用systemd-run在后台启动进程(systemd的术语“暂时服务”)。 例如,假设你想在后台ping一些东西:

 systemd-run --unit=pinger ping 10.8.178.3 

systemd通过nohup运行一个进程所带来的好处是,systemd将跟踪进程和它的子进程,保存日志,记住退出代码,并允许你干净地杀死进程和所有的孩子。 例子:

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

 systemctl status pinger 

流输出:

 journalctl -xfu pinger 

杀:

 systemctl kill pinger