私はexpect
スクリプトを記述してSSHトンネルを開始しようとしていますが、トンネルプロセスが終了するのを待って(エラーを投げて)、トンネルコマンドを再実行します。 (autossh
とその他の自動トンネリングソリューションはここでは関係ありません。私がしようとしているのはexpect
です。)これはトラブルシューティングのメッセージを含む完全なスクリプトです。生成されたプロセスを待つことはありません
#!/usr/bin/expect
set timeout 1
while { $timeout == 1 } {
spawn -noecho ssh -f -N -T -R22224:localhost:22223 [email protected]
send_user "Looking for host"
set timeout 0
wait
set timeout 1
send_user "We've encountered an error. Re-running."
}
send_user "Out of the loop."
ssh
コマンドの機能、およびexpect
man pageは、現在生成されたプロセスが死ぬまでwait
は、スクリプトを保持するべきであると述べているが、それはしていませんし、それが私を強制的に(ループを何回の全体の束を再実行終わりますpkill
リモートマシン上の多くのsshd
インスタンス)。私はwait spawn
、wait spawn_id
、expect {ssh*}
(マニュアルページによると、スクリプトを待たなければならない)を試みましたが、何もスクリプトを一時停止させません。
ありがとう、それは私が行方不明だった。ですから、 'expect'コマンドをバックグラウンドに送って、それが私が望むことをしていることを確認しておかなければなりません。私はそれを行うことができます。 期待しているマニュアルページほど怒っているのは、Linuxプロセスについての私の気まぐれな理解であり、問題の原因となったドキュメントの誤読ではありません。 –