20

現在、リモート マシンに ssh してスクリプトを実行しようとしています。その後、スクリプトを実行したままノードを残します。以下は私のスクリプトです。ただし、実行すると、スクリプトはマシン上で正常に実行されますが、ssh セッションがハングします。どうしたの?

ssh -x $username@$node 'rm -rf statuslist
                        mkdir statuslist
                        chmod u+x ~/monitor/concat.sh
                        chmod u+x ~/monitor/script.sh
                        nohup ./monitor/concat.sh &
                        exit;'
4

5 に答える 5

21

これを使ってどう思いますscreenか?screenssh 経由で実行してコマンド ( concat.sh) を開始すると、監視したい場合は screen セッションに戻ることができます (concat の機能によっては、便利な場合があります)。

より具体的には、これを試してください:

ssh -t $username@$node screen -dm -S testing ./monitor/concat.sh

concat.shプロンプトがすぐに返され、それがリモート マシンで実行されていることがわかります。いくつかのオプションについて説明します。

  • ssh -tTTY を作成します。画面にはこれが必要です。
  • screen -dm「デタッチ」モードで起動します。これは、目的の「背景」のようなものです。
  • -Stesting は、スクリーン セッションに名前を付けます。これはオプションですが、推奨されます。

これが完了したら、リモート マシンに移動してこれを実行できます。

screen -r testing

これにより、プログラムを含む画面セッションに接続されます。そこから、それを制御したり、強制終了したり、出力を確認したりできます。Ctrl-A を押してから d を押すと、screen セッションから切り離されます。 screen -ls実行中のすべてのセッションを一覧表示します。

于 2009-10-27T01:00:52.260 に答える
4

標準入力ストリームの可能性があります。ssh -n ...またはを試してくださいssh -f ...

于 2009-10-27T01:00:29.603 に答える
0

以下は、見つけるのにいくらかの努力が必要な、より一般的な決定であり、私にとっては本当にうまくいきます。

#!/usr/bin/bash
theScreenSessionName="test"
theTabNumber="1"
theStuff="date; hostname; cd /usr/local; pwd; /usr/local/bin/top"

echo "this is a test"

ssh -f user@server "/usr/local/bin/screen -x $theScreenSessionName -p $theTabNumber -X stuff \" 
$theStuff
\""

コマンドの $theStuff リストを、「ユーザー」に代わって「サーバー」で事前に作成されたスクリーン セッション $theScreenSessionName のタブ No $theTabNumber に送信します。

「stuff」オプションの不具合を克服するために送信される -X stuff \" の後の末尾の空白に注意してください。次の行の空白と $theStuff は、「Enter」(^M) キーストロークによって追加されます。エム!

「これはテストです」というメッセージが最初の端末に表示され、$theStuff コマンドが前述の画面/タブ内で実際に実行されます。

于 2014-10-10T09:42:23.257 に答える