2017-06-04 56 views
1


我需要獲取通過ssh運行的腳本的pid。 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' 

任何sugestion?

+0

的大問題,你的第二個方法,順便說一句,是它的設置'$ !'只在一個子shell中,但是在subshel​​l已經退出後,它試圖在該子shell的* parent *中echo $!'。 –

+1

順便說一句,'nohup'完全不能做你自己不能做的事情。 'ssh some.host'./script/dev/null 2>&1&echo「$!」; disown -a''完成了遠程'nohup'所能做的所有*有用的事情,沒有無用的/有害的事情(比如創建'nohup.out') - 如果你想記錄stdout/stderr,用一個文件名您可以通過爲重定向指定一個不是「/ dev/null」的目標來進行控制)。 –

+0

順便說一句,如果你想用它來啓動一個遠程服務,更好的方法是使用合適的過程監控系統 - runit,daemontools,upstart,systemd等;一旦某個東西被定義爲服務,那些提供命令來啓動它們,停止它們,檢查它們的狀態等等,不需要知道PID。 –

回答

0

至於我還記得,那它應該是 -

./script & echo $! 

沒有

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

絕對正確無誤。也就是說,如果程序試圖寫入stdout或stderr(或者從stdin讀取,或者在接收SIGHUP時退出),它可能會在ssh退出後終止。爲了避免這種情況,考慮將這些文件重定向到/從文件中,和/或使用'disown'來防止shell在退出時發送SIGHUP。 –

+0

@Jakuje,它**確實**在後臺運行'。/ script'。一個'&'是一個命令終止符,它將前面的命令放在後臺。 –