【问题标题】:Will Aborting a shell script abort the command it is executing中止 shell 脚本会中止它正在执行的命令吗
【发布时间】:2011-08-20 21:45:01
【问题描述】:

我是 shell 脚本的菜鸟,我尝试搜索但找不到解决方案。

我的互联网连接不好,而且一直掉线。我必须在远程服务器上运行某些命令。当我在终端上 ssh 并运行这些命令并且连接断开时,我不确定命令是继续还是停止(我假设它的行为就像收到 Ctrl^C 一样。我正确吗?)

现在我已将所有命令放入一个 shell 脚本中。在服务器上对其进行 ftp 编辑,并通过 ssh 在终端上运行它。这是否可以保证即使连接断开,我的命令也会运行。还是应该将它包装在另一个 shell 脚本中?

谢谢。

【问题讨论】:

    标签: bash shell networking ssh


    【解决方案1】:

    如果您需要保留连接断开后远程运行的命令,请使用nohup。详情请参阅man nohup。我想你需要做的就是在远程端运行:

    nohup /path/to/your_script.sh &
    

    更准确地说,每当连接断开时,在服务器端发生超时,套接字就会关闭,并且所有属于 ssh 连接进程的进程树的进程都会随之关闭。

    【讨论】:

    • 换句话说,它将中止。如果你不想那样使用nohup
    • 感谢 AppleGrew,我编辑了帖子以考虑您的评论。
    【解决方案2】:

    你需要看输出吗?

    如果是这样,请使用screen,它可以有效地运行服务器上的所有内容并让您远程连接到屏幕。

    如果你不这样做,那么你可以使用nohup 来后台处理进程。这样做时,请确保重定向标准流,即

    nohup script_to_run &>/dev/null </dev/null &
    

    【讨论】:

      【解决方案3】:

      使用nohup 运行脚本或在screen 会话中运行脚本

      【讨论】:

        【解决方案4】:

        要保证即使断开连接也能运行命令或脚本,请使用nohup

        要获得更多控制,请使用 GNU Screen(您将能够重新连接并返回到正在运行的命令的终端)。

        man nohupman screen 有更多信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-11
          • 1970-01-01
          • 1970-01-01
          • 2013-09-22
          • 2012-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多