我遇到一個很奇怪的行爲失敗。我發現似乎是一種工作,但我希望有人能向我解釋爲什麼我看到這種瘋狂的行爲。通過ssh運行腳本時在本地同一腳本成功
的高層我在做什麼:我想有一個shell腳本來阻止我的過程。我希望它足夠強大,可以殺死我正在尋找的一個或多個實例。我不想,如果沒有進程中運行(意思是我希望有一個0返回碼傳遞給kill命令......不是一個空洞的ARG列表)
我所看到的是一個腳本行爲它失敗當通過ssh傳遞一個命令而不是在本地執行相同的腳本時調用不同。非常奇怪的是,通過向我的ssh命令添加一個看似任意的命令,我能夠讓我的腳本正確執行,並且我不知道爲什麼!
停止素文字(回聲statments在那裏幫我調試 - 不是真正的腳本的一部分)
echo "Stopping myProcess" echo "-->
的ps aux | grep myProcess | grep -v grep" pid=
ps -ef | grep myProcess | grep -v grep |從不同的機器雖然腳本的執行的
Stopping myProcess --> Here: Here3 not stopping anything - no myProcess running. Here4
結果:當NO進程運行AWK '{打印$ 2}'
echo "Here: ${pid}" if [[ ! -z $pid ]]; then echo "Here2" kill -9 $pid else echo "Here3" echo "not stopping anything - no myProcess process running." fi echo "Here4" exit 0
結果腳本的本地執行的以下命令:
命令:
SSH eak0703 @ myServer上 '源$ {HOME}/.bash_profile中; CD /usr/local/myprocess/bin/;./stop-myProcess。'
結果:
Stopping myProcess --> eak0703 2099 0.0 0.0 10728 1500 ? Ss 17:08 0:00 bash -c source ${HOME}/.bash_profile;cd /usr/local/myProcess/bin/;./stop-myProcess eak0703 2100 0.0 0.0 10740 992 ? S 17:08 0:00 bash -c source ${HOME}/.bash_profile;cd /usr/local/myProcess/bin/;./stop-myProcess eak0703 2101 0.0 0.0 10740 668 ? S 17:08 0:00 bash -c source ${HOME}/.bash_profile;cd /usr/local/myProcess/bin/;./stop-myProcess Here: 2099 2100 2105 Here2
注意:一些奇怪的和難以解釋的,以我的理由,似乎有我的命令3所調用。我也知道,這個命令不會因爲通過kill -9被調用時用0我假定這是一個退出代碼終止,進程ID拾起grep的都沒有了。
現在 - 這裏有一個額外的 「日期| grep的廢話」 的相同的SSH命令拋出:
命令:
SSH eak0703 @ myServer上「源$ {HOME}/.bash_profile中; CD。/usr/local/myprocess/bin /; date | grep的廢話; ./停止myProcess'
結果:
Stopping myProcess --> Here: Here3 not stopping anything - no myProcess running. Here4
把 「日期| grep的廢話」 解決的事情。看起來,魔法是在「|」 (管道)操作員。所以我實際上可以使用「anycommand | anyothercommand」來完成這項工作。
我可以使它工作 - 但我怎麼能證明隨機離開這樣一個塊在bash腳本?沒有人會知道爲什麼會出現這種情況。連我都沒有!如果有人遇到這個請幫忙!
是的!這是對的。我仍然想知道爲什麼我的bash命令運行的似乎有3個「實例」? – eak12913 2014-11-24 23:38:21
另外 - 對於任何試圖殺死可能具有相同名稱(例如:java)但具有不同參數的幾個進程之一併希望使用pkill/pgrep的用戶,他們應該使用'-f'標誌,以便查詢是匹配完整的參數列表。 # – eak12913 2014-11-24 23:40:52
@ eak0703 1.由ssh調用的'bash'進程,2.執行'./ stop-myProcess'腳本的fork,因爲它沒有shebang,並且3 。你的命令替換的子shell。 – 2014-11-24 23:53:28