我試圖運行下面的命令作爲bash腳本的一部分,它假設打開ssh通道,在遠程機器上運行該程序,將輸出保存到文件10秒,殺死正在寫入文件的進程,然後將控制權交還給bash腳本。從bash腳本中kill ssh或和遠程進程
#!/bin/bash
ssh hostname '/root/bin/nodes-listener > /tmp/nodesListener.out </dev/null; sshpid=!$; sleep 10; kill -9 $sshpid 2>/dev/null &'
不幸的是,它似乎做的是在啓動程序:遠程節點監聽器,但它從來沒有得到任何進一步的,它不會把控制權交給了bash腳本。所以,停止執行的唯一方法是按Ctrl + C。
因爲ssh並沒有幫助(或者說不能執行),因爲控制器沒有使用bash腳本,因爲它等待ssh會話中的命令完成,這當然不會發生,因爲它必須是殺死停止。
謝謝。我的命令是bash腳本的一部分。爲什麼我需要指定它是明確的bash? – DOgl 2014-09-01 15:20:25
您的命令遠程運行,由ssh觸發。正如我所說的,ssh不會啓動一個shell並在其中執行命令。它將簡單地使用'execve'(或朋友)來執行命令。但是你的命令並不是更多的shell腳本。這就是爲什麼你需要在shell中執行它 – hek2mgl 2014-09-01 15:21:58
它抱怨:「sh:bash:找不到」如果我運行它 - bash -c – DOgl 2014-09-01 15:31:05