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コマンドがreboot --force
サーバーで実行されてから1秒後に終了することを意味します。その後、クライアント側で2秒間待ちます。
これで私は確信できます
- ssh コマンドは常に成功します。
- スクリプト全体が終了したら、少なくともサーバーを停止する必要があります。