私はreboot -f
このコマンドをリモートで使用してUnixシステムを強制的に再起動しています。問題は、SSH接続が長い間アクティブになっているのですが、その理由がわからないということです。 SSH接続を閉じてコンピュータを再起動したら、すぐにローカルシェルに戻りたいです。どうすればいいですか?フラグのない再始動コマンドは-f
何の効果もありません。
ベストアンサー1
reboot -f
再起動する権限がない限り、コマンドは返されません。このコマンドが実行されると、SSH クライアントは次のようないくつかの操作が実行されるのを待っています。
- SSHサーバーは、表示する出力があるか、リモートコマンドが完了するなど、注意が必要なことが発生したことをクライアントに通知します。
- 中継される信号など、クライアント側で発生したいくつかのイベント
- タイマーが起動し、クライアントに接続保持メッセージを送信させます(またはサーバーが応答しない場合は接続を閉じます)。
SSH サーバー・プロセスが終了したため、タイマーが開始される前に SSH クライアントは終了しません。
次を実行するとssh remotehost 'reboot -f >/dev/null &'
どうなりますか?
- リモートシェルは
reboot
バックグラウンドでコマンドを起動します。 - サーバー側のシェルコマンドが終了し、標準出力ファイル記述子を開いたままにしたプロセスがないため、SSHサーバーは接続を閉じます。
- この
reboot
コマンドを実行すると、マシンが再起動します。
しかし、これは信頼できません。時期によっては、ステップ3がステップ2の前に発生する可能性があります。タイマーを追加すると、これが発生する可能性が低くなります。
ssh remotehost '{ sleep 1; reboot -f; } >/dev/null &'
サーバー側が running でコミットされていることを確実に確認し、同時にコミットされたことをreboot
クライアントに通知する前に実際に再起動しないようにするには、サーバーからクライアントへの追加の通知が必要です。 SSH接続を介して出力できますが、複雑になります。