通过 ssh 调用reboot --force:重启前会发生 ssh 会话断开吗?

通过 ssh 调用reboot --force:重启前会发生 ssh 会话断开吗?

我需要reboot --force在脚本中自动通过 ssh 运行(不用担心 --force 会导致数据丢失,我sync之前已经发出过命令)。

到目前为止我已经通过以下方法成功完成了:

orig_args=(bash -c "nohup reboot --force >/dev/null 2>&1 </dev/null &")

args=(); for v in "${orig_args[@]}"; do args+=("$(printf %q "$v")"); done

ssh host "${args[@]}"

意思是

bash -c "nohup reboot --force >/dev/null 2>&1 </dev/null &"

reboot --force即,即使 ssh 连接关闭,也会在前台运行。

我希望 ssh 会话断开在重新启动之前发生,但不确定,

即,以下情况可能吗?

如果操作系统启动重启后台作业的速度太快,则可能会导致 ssh 连接断开,从而导致 ssh 命令本身失败。

我希望答案是假的,有什么可以支持我的希望吗?

如果答案是“不确定”,那么我不能冒险,我将使用另一个麻烦的确保它的方法,例如

orig_args=(bash -c "nohup bash -c 'sleep 1; reboot --force' >/dev/null 2>&1 </dev/null &")

args=(); for v in "${orig_args[@]}"; do args+=("$(printf %q "$v")"); done

ssh host "${args[@]}"

sleep 2

这意味着 ssh 命令退出后,1 秒后,reboot --force在服务器上运行。然后在客户端,等待 2 秒。

通过这种方式,我可以确保

  • ssh 命令总是会成功。
  • 整个脚本退出后,服务器至少应该已经关闭。

相关内容