如何解决通过 SSH 执行长命令后的继续脚本
我的 local
计算机正在运行一个 bash 脚本,该脚本在 remote
上执行另一个脚本(本地),如下所示:
#!/bin/bash
# do stuff
ssh remote@remote "/home/remote/path/to/script.sh"
echo "Done"
# do other stuff
script.sh
执行大约需要 15 分钟。 没有丢失连接,script.sh
被完全执行(直到最后一行)。但是,Done
永远不会被回显(也不会执行 other stuff
)。
注意事项:
-
我已经尝试过使用
screen
和nohup
,但就像我说的,连接是稳定的,并且script.sh
被彻底执行(script.sh
没有好像掉线了)。 -
我需要
script.sh
结束才能继续执行other stuff
所以我无法真正运行脚本并分离(或者我需要知道脚本何时在我开始做other stuff
之前结束。 -
如果我使用仅持续 5 分钟(而不是 15 分钟)的虚拟脚本,一切都会正常。
编辑:
script.sh
用于测试:
#!/bin/bash
touch /tmp/start
echo "Start..." & sleep 900; touch /tmp/endofscript
解决方法
添加 xxxxxx 1 of 100000
...
xxxxxx 99999 of 100000
xxxxxx 100000 of 100000
解决了该问题。
ServerAliveInterval 选项每 60 秒通过网络在您的设备和目标服务器之间发送数据包,从而防止您的路由器认为 SSH 连接处于空闲状态。 (source)
如果脚本需要几分钟才能执行并且没有输出,这将使连接保持活动状态并避免它超时和挂起。
两个选项:
-o ServerAliveInterval=60
- 将以下几行添加到
ssh -o ServerAliveInterval=60 remote@remote "/home/remote/path/to/script.sh"
计算机的~/.ssh/config
(将local
替换为您的遥控器名称或remote
以启用任何遥控器):*
更多信息:
,您是否尝试在脚本中设置 set -xv
,或者使用 bash -xv script.sh
执行两个脚本以获取脚本执行的详细信息?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。