2017-06-04 8 views
1

こんにちは
スクリプトのpidをsshで実行する必要があります。 sshがバックグラウンドでスクリプトを実行し、そのpidを取得

 

ssh some.host './script &' #get the pid of it 

私がこれまでにしようとしていたいくつかのコード:

 

ssh some.host './script & ; echo $!' 

 

nohup ssh some.host '(./script &); echo $! > thePID'; ssh some.host 'cat thePID' 

どれ暗示?

+0

なし

./script & echo $! 

あなたの第二のアプローチの大きな問題は、方法によって、それは '$を設定するということです! 'を実行するだけですが、サブシェルが終了した後に、そのサブシェルの* parent *に' echo $! 'を実行しようとしています。 –

+1

ところで、 'nohup'は自分でできないことは絶対にありません。 'ssh some.host './script/dev/null 2>&1&echo" $! "; 'nohup.out'を作成するのと同じように、無駄な/有害なことなしに、リモートの' nohup'がやる*有用な*すべてのものを行います。stdout/stderrを記録したい場合は、ファイル名リダイレクションのために '/ dev/null'以外の宛先を指定して制御します)。 –

+0

ところで、これを使ってリモートサービスを開始しようとするなら、適切なプロセス監視システム、runit、daemontools、upstart、systemdなどを使用する方が良いでしょう。何かがサービスとして定義されると、それらを起動するコマンド、停止するコマンド、ステータスを確認するコマンドなどがあります。 –

答えて

0

私が覚えている限りでは、それはこのする必要があります -

; 
1
ssh some.host './script & echo $!' 
+0

明らかにinasfarが正しいように修正してください。つまり、プログラムがstdoutまたはstderrに書き込もうとする(またはstdinから読み込む、またはSIGHUPを受け取ったときに終了する)場合、sshが終了した後にkillされる可能性があります。これを避けるには、それらをファイルに/からリダイレクトするか、またはシェルが終了したときにSIGHUPが送信されないようにするために 'disown 'を使用することを検討してください。 –

+0

@Jakuje、**実際には '。/ script'をバックグラウンドで実行します。単一の '&'は、前のコマンドをバックグラウンドに置くコマンドターミネータです。 –

関連する問題