通过ssh运行持久进程

9-b*_*its 17 unix linux ssh

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

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

Joh*_*web 20

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

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

  • 示例:使用 ssh 和 screen 创建几乎可以从任何地方访问的持久终端会话 http://bit.ly/1ewxKKv (2认同)

Nik*_*ita 6

如果您通过 SSH 连接到具有 systemd 的 Linux 发行版,您可以使用systemd-run它在后台启动一个进程(用 systemd 的术语来说,“临时服务”)。例如,假设您想在后台 ping 某些内容:

systemd-run --unit=pinger ping 10.8.178.3
Run Code Online (Sandbox Code Playgroud)

使用 systemd 比仅运行一个进程所获得的好处 nohup,systemd是 systemd 将跟踪进程及其子进程、保留日志、记住退出代码并允许您干净地终止进程及其所有子进程。例子:

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

systemctl status pinger
Run Code Online (Sandbox Code Playgroud)

流输出:

journalctl -xfu pinger
Run Code Online (Sandbox Code Playgroud)

杀:

systemctl kill pinger
Run Code Online (Sandbox Code Playgroud)


rua*_*akh 5

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

或者,如果您自己编写服务器,您可以编写代码以注册HUP 信号的处理程序,并将其吞入程序中(而不是使用nohup执行相同操作的外部程序)。