【问题标题】:Run a persistent process via ssh通过 ssh 运行持久化进程
【发布时间】:2019-01-25 23:38:52
【问题描述】:

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

有没有办法启动一个进程(运行服务器),这样它就不会在我的 ssh 会话结束时死掉?

【问题讨论】:

    标签: linux unix ssh


    【解决方案1】:

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

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

    【讨论】:

    • 示例:使用 ssh 和 screen 创建可从几乎任何地方访问的持久终端会话bit.ly/1ewxKKv
    【解决方案2】:

    如果您通过 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
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 谢谢。您为 ssh 的 -f 选项节省了我的时间。
        【解决方案5】:

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

        另见daemon(3)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多