【发布时间】:2019-01-25 23:38:52
【问题描述】:
我正在尝试通过 ssh 启动测试服务器,但一旦我断开与 ssh 的连接,它总是会死机。
有没有办法启动一个进程(运行服务器),这样它就不会在我的 ssh 会话结束时死掉?
【问题讨论】:
我正在尝试通过 ssh 启动测试服务器,但一旦我断开与 ssh 的连接,它总是会死机。
有没有办法启动一个进程(运行服务器),这样它就不会在我的 ssh 会话结束时死掉?
【问题讨论】:
作为nohup 的替代方案,您可以在终端多路复用器中运行远程应用程序,例如GNU screen 或tmux。
使用这些工具可以轻松地从另一台主机重新连接到会话,这意味着您可以在下班前开始长时间的构建或下载,并在回家时检查其状态。例如。在我和他们之间连接不可靠的非常偏远(在不同国家)的服务器上进行开发工作时,我发现这特别有用,如果连接断开,我可以简单地重新连接并继续,而不会丢失任何状态。
【讨论】:
如果您通过 SSH 连接到具有 systemd 的 Linux 发行版,您可以使用 systemd-run 在后台启动一个进程(在 systemd 的术语中,“临时服务”)。例如,假设你想在后台 ping 一些东西:
systemd-run --unit=pinger ping 10.8.178.3
与使用nohup 运行进程相比,systemd 的好处是 systemd 将跟踪进程及其子进程、保留日志、记住退出代码并允许您彻底终止进程及其所有子进程.例子:
查看状态和输出的最后几行:
systemctl status pinger
流式输出:
journalctl -xfu pinger
杀死:
systemctl kill pinger
【讨论】:
是的;您可以使用the nohup command 吞下挂断 SSH 会话时发送到您的程序的 HUP(“挂断”)信号。
或者,如果您自己编写服务器,则可以将其编码为 register a handler 以获得 HUP 信号,并将其吞入程序中(而不是使用执行相同操作的外部 nohup 程序)。
【讨论】:
除了其他回复,您可以通过batch(或at)启动您的测试服务器,但作为Brian answered,您应该调用daemon
您可以将-f 选项传递给ssh
【讨论】:
-f 选项节省了我的时间。
作为nohup、screen 等的替代品。您可以修改您的服务器以调用 daemon 以将其与终端分离。这是为 linux 编写服务的惯用方式。
另见daemon(3)。
【讨论】: