我正在尝试通过ssh启动测试服务器但是一旦我从ssh断开连接它总是会死掉。
有没有办法启动进程(运行服务器),以便在我的ssh会话结束时不会死?
答案 0 :(得分:19)
作为nohup
的替代方案,您可以在终端多路复用器中运行远程应用程序,例如GNU screen
或tmux
。
使用这些工具可以轻松地从其他主机重新连接到会话,这意味着您可以在离开工作之前进行长时间构建或下载,并在回家后检查其状态。例如。我发现在非常远程(在不同国家/地区)的服务器上进行开发工作时,这对我和他们之间的连接不可靠非常有用,如果连接断开,我可以简单地重新连接并继续而不会丢失任何状态。
答案 1 :(得分:4)
是;您可以使用the nohup
command吞下挂断SSH会话时发送到程序的HUP(“挂断”)信号。
或者,如果您自己编写服务器,可以将其编码为register a handler以获取HUP信号,并将其吞入程序内(而不是使用外部nohup
程序执行相同)。
答案 2 :(得分:4)
除了其他回复之外,您可以通过batch(或at
)启动测试服务器,但是Brian answered应该调用daemon
您可以将-f
选项传递给ssh
答案 3 :(得分:3)
作为nohup
,screen
等的替代方案。您可以修改服务器以调用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