質問: sshがこれらのコマンドの最後でハングするのはなぜですか、どうすれば終了させることができますか? 私はこれを実行します:ssh -t -vvv -i ~/.ssh/druid-keypair -o stricthostkeychecking=no ubuntu@${instance_address} <<eoi # setup oracle java ... # install dependencies - mysql must be built from source, as the 12.04 apt-get hangs export debian_frontend=noninteractive sudo debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password password diurd' sudo debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password_again password diurd' sudo apt-get -q -y -v --force-yes --reinstall install mysql-server-5.5 echo "all done with druid environment setup!" exit eoi 注:私はsshで-tを付けて、または付けずに試してみました。-vvvからのデバッグ出力は次のとおりです。... ldconfig deferred processing now taking place all done with druid environment setup! debug1: client_input_channel_req: channel 0 rtype exit-status reply 0 そして、プロセスは永遠にそこにあります。 sshコマンドが終了しないのはなぜですか?私は-tありとなしで試してみました、そして出口ありとなしで試してみました。違いはありません:(更新:スクリプトの最後に「jobs」と入力すると、次のように表示されます。jobs: [1]- running nohup bin/zookeeper-server-start.sh config/zookeeper.properties 2>&1 > /dev/null & [2]+ running nohup bin/kafka-server-start.sh config/server.properties 2>&1 > /dev/null & これらのサービスを実行しても、sshセッションを終了するにはどうすればよいですか?更新:これらのプロセスを手動で否認しました。事はまだ存在しません。 wtfの仲間?更新:行ごとに実行すると、2つのコマンドがcrを押さないとシェルに戻りません。nohup bin/zookeeper-server-start.sh config/zookeeper.properties & nohup bin/kafka-server-start.sh config/server.properties &
回答: 通常、バックグラウンド接続がまだ開いている場合、sshターミナルセッションはハングします。バックグラウンド接続とは、次のようなことを意味します。 x11ウィンドウ転送 stdoutおよびstderr ハングしたsshターミナルで~#と入力して、ハングしたsshセッションでまだアクティブな接続を確認します。スクリプトが、気づかなかったセッションを開いている可能性があります。または、.profile(または.bashrcなど)などのリモートマシンの端末設定に、セッションを確立する何かが含まれている可能性があります。頑張ってハンティング!ちなみに、opensshクライアントが提供する他のエスケープシーケンスの一部も役立つ場合があります。supported escape sequences: ~. - terminate connection (and any multiplexed sessions) ~b - send a break to the remote system ~c - open a command line ~r - request rekey (ssh protocol 2 only) ~^z - suspend ssh ~# - list forwarded connections ~& - background ssh (when waiting for connections to terminate) ~? - this message ~~ - send the escape character by typing it twice (note that escapes are only recognized immediately after newline.) もう1つ、sshでコマンドを実行してすぐに終了する場合、つまり、リモートターミナルセッションを使用しない場合は、-fオプションをsshに使用できます。 。これにより、ssh接続がバックグラウンドジョブになります。