嗨
我需要獲取通過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?
嗨
我需要獲取通過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?
至於我還記得,那它應該是 -
./script & echo $!
沒有
;
ssh some.host './script & echo $!'
絕對正確無誤。也就是說,如果程序試圖寫入stdout或stderr(或者從stdin讀取,或者在接收SIGHUP時退出),它可能會在ssh退出後終止。爲了避免這種情況,考慮將這些文件重定向到/從文件中,和/或使用'disown'來防止shell在退出時發送SIGHUP。 –
@Jakuje,它**確實**在後臺運行'。/ script'。一個'&'是一個命令終止符,它將前面的命令放在後臺。 –
的大問題,你的第二個方法,順便說一句,是它的設置'$ !'只在一個子shell中,但是在subshell已經退出後,它試圖在該子shell的* parent *中echo $!'。 –
順便說一句,'nohup'完全不能做你自己不能做的事情。 'ssh some.host'./script/dev/null 2>&1&echo「$!」; disown -a''完成了遠程'nohup'所能做的所有*有用的事情,沒有無用的/有害的事情(比如創建'nohup.out') - 如果你想記錄stdout/stderr,用一個文件名您可以通過爲重定向指定一個不是「/ dev/null」的目標來進行控制)。 –
順便說一句,如果你想用它來啓動一個遠程服務,更好的方法是使用合適的過程監控系統 - runit,daemontools,upstart,systemd等;一旦某個東西被定義爲服務,那些提供命令來啓動它們,停止它們,檢查它們的狀態等等,不需要知道PID。 –