長時間実行されるSSHコマンドのハング-より良い戦略?


2

SSHを介して実行される長時間実行コマンドがあります。頻繁に、コマンドがハングして出力の取得が停止するようです。コマンドはまだ他のマシンで実行されています(実際、SSHコマンドからCtrl + Cを押しても実行されますが、これは問題ありません)、クライアントはハングします。

私のコマンドは次のantようにターゲットを実行しています:

ssh -tt user@machine 'cd /thedir; export DISPLAY=:80; ant clean test'

antコマンドは、時間のかかることがあります。

ネットワークの中断が発生し、接続が混乱する可能性があるため、これは悪い戦略だと思います。誰もが別のアプローチを提案できますか?私の目標は次のとおりです。

  1. クライアントはコマンドが終了するのを待ちます
  2. 私はまだコマンドから出力を受け取ります
  3. ネットワークブリップが発生しても、コメントを確認して、コメントが終了するのを待つことができます

どんな助けや提案も大歓迎です。

編集:私は完全なbashスクリプトを実行しています...私はワンライナーまたはそのような何かを必要としません。


1
「スクリーン」を使用すると役立つ場合があります。これにより、切断したときにセッションに再接続し、出力を再開できます。gnu.org/software/screen
フランク・トーマス

1
@FrankThomas-はい-それを答えとして追加します。いくつかの票獲得
ダグ・ハリス

興味深いことに、私はに精通していませんscreen。それがまさに私が探しているものかもしれません。掘ります。
ショーンアドキンソン

回答:


2

バックグラウンドでコマンドを実行して(ユーザーセッションから切り離して)、結果をメールで送信してみてください。ちょっとこんな感じ:

ssh -tt user@machine 'cd /thedir; nohup ant clean test 2>&1 | mail -s "The cleanup was completed." your-email@exmaple.com'

ただし、これはテストしていません。


クライアントスクリプトがコマンドの完了を待つことを望んでいます。これはちょうど良いスクリプトになるので、いつ完了したかはわかりますが、私の目標は少し異なります。
ショーンアドキンソン

@BigSean:まあ、ポイントは、「ネットワークブリップ」により切断される可能性があるということです。あなたが接続していない場合、クライアントはどのように何かを待つことになっていますか?ファイルにログを記録し、コマンドが終了するまでそのログを監視し、接続が切断された場合でもログを保持するなど、より複雑になることしか想像できませんでした。それとも、目標を誤解していますか?
デアホッホステープラー

うまくいけば、スクリプトが再アタッチするか、スクリプトが完了するまでチェックし続ける必要があります。スクリプトは、コードチェックインごとにCI環境で実行されているため、次のビルドステップを実行できるように、スクリプトが完了するまで待機する必要があります。スクリプトが失敗した場合、ビルドが失敗する必要があります。これらの詳細について質問を更新します。ありがとう
ショーンアドキンソン

@BigSean:その場合、もっと複雑なものを書くことになります。しかし、最終的には、このSSH接続にまったく依存しないソリューションを実現したいと考えています。
デアホッホスタプラー

2

私の推奨事項は、AutoSSHと画面の組み合わせを使用することです。セッションが切断された場合、autosshはSSHを自動的に再接続します。また、画面でプログラムをsshセッションとは独立して実行できるため、進行中のセッションに再接続できます。

そうすることで、ネットワークが一時停止すると、autosshが再接続し、画面がスクリプトシェルに再接続されます。

localhost>$ autossh -t remotehost 'screen -Rd'
remotehost>$ scriptname

そうすれば、sshが終了すると、autosshが再接続し、スクリーンセッションを自動的に再接続します。

http://noone.org/blog/English/Computer/Shell/Perfect%20Team:%20autossh%20and%20GNU%20Screen.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.