2016-06-08 75 views
0

再次啓動它,我試圖做這樣的:Shell腳本。如何殺死Java進程,然後用nohup的

file_name=$1 
#Clear log file 
echo > nohup.out 
for PID in $(ps aux | grep service_name | awk {'print $2'}); do 
    kill -9 $PID; 
done 
echo "Killed old process" 
nohup java -Xms256m -Xmx256m -XX:MaxMetaspaceSize=256m -jar $file_name & 
echo "Started new process" 

,但它只是打印「封殺」,不會再次啓動它。 如果我單獨做這一切的東西 - 它的工作,但都在一起 - 不是......

Допоможітьхтозможе...

回答

0

從中執行它的腳本,它包含「服務名」中其名稱?那麼它明顯符合你爲循環所殺的標準並自殺。

如果沒有,則依然是grep service_name遺蹟,滿足殺標準(有SERVICE_NAME在CMD線) - 在grep的固定字符串我平時寫他們grep "s[e]rvice_name",其他喜歡把另一|grep -v grep進入管道前awk

+0

對於固定字符串,'fgrep' /'grep -F'如何? https://www.gnu.org/software/grep/manual/grep.html#grep-Programs –

+0

@Johannes,重點是從'ps'輸出中擦除一個字符串而不會grep grep本身 - 當你grep 「service_ [n] ame」'然後在ps的輸出中會有'grep service_ [n] ame',並且這個**不是由正則表達式service_ [n] ame匹配的,所以你只有其他所有的進程顯示service_name –

+0

冬青牛,你是對的!謝謝!! – SoulCub