reboot -f
コマンドをリモートで使用して、Unixマシンを強制的に再起動しています。問題は、ssh接続が長時間アクティブのままであるということですが、その理由はわかりませんか?マシンを再起動した直後にssh接続を閉じて、ローカルシェルに戻りたい。どうやってやるの?-f
フラグなしの再起動コマンドは機能しないことに注意してください。
Enter
。次に、たとえば~.
セッションを終了します。 Enter ~?
他のリスト。
reboot -f
コマンドをリモートで使用して、Unixマシンを強制的に再起動しています。問題は、ssh接続が長時間アクティブのままであるということですが、その理由はわかりませんか?マシンを再起動した直後にssh接続を閉じて、ローカルシェルに戻りたい。どうやってやるの?-f
フラグなしの再起動コマンドは機能しないことに注意してください。
Enter
。次に、たとえば~.
セッションを終了します。 Enter ~?
他のリスト。
回答:
コマンドreboot -f
が返されることはありません(再起動を行う権限がない場合を除く)。それが発行された時点で、SSHクライアントは何かするのを待っています。
SSHサーバープロセスは停止しているため、SSHクライアントはタイマーが起動するまで停止しません。
を実行するとssh remotehost 'reboot -f >/dev/null &'
、次のようになります。
reboot
はバックグラウンドでコマンドを起動します。reboot
コマンドにより、マシンが再起動します。ただし、これは信頼できません。タイミングによっては、ステップ3がステップ2の前に発生する場合があります。タイマーを追加すると、これが起こりにくくなります。
ssh remotehost '{ sleep 1; reboot -f; } >/dev/null &'
サーバー側が実行されていることを完全に確認すると同時に、クライアントにコミットされたreboot
ことを通知する前に実際に再起動しないことを確認するには、サーバーからクライアントに移動するための追加の通知が必要です。これはSSH接続を介して出力できますが、複雑になります。
(sleep 1 && sudo reboot &) && exit
。括弧はサブプロセスを生成し、1秒待ってから再起動を開始します。ただし、ホストプロセスはsshセッションを直ちに終了します。私はシェルの第一人者ではありませんが、これは今のところうまくいきました。
私はこのソリューションが私にとって最高のパフォーマンスを発揮することを発見しました。
次のようにコマンドで使用-o "ServerAliveInterval 2"
しますssh
:
$ ssh -o "ServerAliveInterval 2" root@remotehost reboot
上記のオプションにより、クライアント側は2秒ごとに安全なチャネルでサーバーを突くことができます。最終的に再起動が進むと、再起動は停止し、クライアントは接続を切断します。
いくつかの答えは近かったですが、正しい答えは次のとおりです。
ssh user@192.168.0.130 "nohup sudo reboot &>/dev/null & exit"
説明:
exit
最後のコマンドのステータスが0(成功)になるように、最後のコマンドにしたい。必要に応じて睡眠を追加できますが、必須ではありませんstdin
とstdout
はまだSSH経由で仮想端末に接続されているため、バックグラウンドで実行するだけでは十分ではないため、接続は閉じられません。SSHセッションを終了し、コマンドをバックグラウンドで実行したままにするには、さらに2つのことを行う必要があります。
stdout
とstderr
の/dev/null
それらはSSHセッションを保持している仮想端末によってリダイレクトされないように。これは&>/dev/null
一部です。stdin
同じ方法で読めないファイルにリダイレクトする必要があります。それがシェルの組み込みnohup
機能です。バックグラウンドで実行されるコマンドのみが端末から切り離さexit
れると、セッションが閉じられ、仮想端末が存在しないstdin
かstdout
残っているため、SSHはエラーなしで接続を終了します。
私が見つけた簡単な方法は、シャットダウン/リブートをバックグラウンドタスクとしてコマンドし(「&」を使用)、セッションが「nohup」で閉じられたときに閉じられるのを防ぎ、すぐにシェル/セッションを終了します:
nohup shutdown -r now & exit
この方法では、リモートシステムが非同期でリブートを続行している間にセッションがすぐに終了するため、SSHクライアントはハングしません。