我需要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 命令总是会成功。
- 整个脚本退出后,服务器至少应该已经关闭。