当我失去与远程主机的连接时,如何在远程主机上运行脚本?

当我失去与远程主机的连接时,如何在远程主机上运行脚本?

我正在使用运行 Debian Linux 的 BeagleBone Black,有时在测试程序时会失去与它的无线连接。这本身不一定是一个问题,但是,由于我在机器人上运行它,如果我无法停止其上运行的任何程序,则可能会发生不好的事情。有没有办法让 BBB(或一般的 Linux)检测我何时失去了与它的连接,并在当前运行的程序中做出响应或运行单独的脚本以强制一切进入安全状态?我做了一些阅读并尝试使用 SIGHUP,但这实际上不起作用(在我强制终止本地 SSH 进程后电机继续运行)。

答案1

您可以运行某种看门狗脚本,该脚本需要每 n(毫秒)秒通过远程连接发送一个信号,并让它在未收到信号时执行某些操作。

如何为shell脚本引入超时?expect有关在超时时打印消息 的脚本示例;您可以更改它以创建安全关闭。

看门狗 echo (localhost) 和 Expect (robot) 应该通过相同的 ssh 连接,例如通过 ssh 端口转发。这样,当您断开 ssh 连接时,看门狗也会关闭并启动安全停车脚本。

答案2

我不知道 BBB,但正如 heemayl 所说,你可以使用 screen (或 tmux,我发现它对用户更友好)。

这些工具允许您连接到远程计算机,执行您想要的操作(例如启动脚本),分离会话并稍后重新连接。 tmux 的优点是它允许在计算机上轻松创建多个会话并将它们分割到不同的选项卡中。

这是您要找的吗?

答案3

您可能想要调查mosh哪一个类似于针对不可靠连接进行修改的 ssh。从网站:

Mosh(移动外壳)远程终端应用程序,允许漫游,支持间歇性连接,并提供智能本地回显和用户击键的行编辑。

Mosh 是 SSH 的替代品。它更加稳健、响应更快,尤其是通过 Wi-Fi、蜂窝网络和长距离链接。

相关内容