2016-06-08 2 views
0

Ich versuche, es so zu tun:Shell-Skript. Wie Java-Prozess zu töten und es dann wieder von vorne anfangen mit 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" 

Aber es ist nur das Drucken „getötet“ und es nicht wieder von vorn anfangen. Wenn ich separat all diese Dinge zu tun - es funktioniert, aber für alle zusammen - nicht ...

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

Antwort

0

Das Skript, von dem Sie es ausführen, enthält sie „service_name“ in seinen Namen? Dann erfüllt es offensichtlich die Kriterien für den von Ihrer for-Schleife getöteten Begin und begeht Selbstmord.

Wenn es nicht tut, dann noch die grep service_name Reste, die die Abtötung Kriterien erfüllt (hat service_name in seiner cmd Linie) - für feste Zeichenketten in grep ich sie grep "s[e]rvice_name" in der Regel schreiben, andere bevorzugen eine andere, bevor die |grep -v grep in das Rohr zu setzen awk

+0

Wie wäre es mit 'fgrep' /' grep -F für feste Strings? https://www.gnu.org/software/grep/manual/grep.html#grep-Programs –

+0

@Johannes, geht es darum, einen String von der 'ps'-Ausgabe zu entfernen, ohne grep den grep selbst - wenn du' grep "service_ [n] ame" 'dann wird in der Ausgabe der ps' grep service_ [n] ame' sein und das wird ** nicht ** von der regex service_ [n] ame gematcht, also hast du _only_ alle anderen Prozesse mit service_name –

+0

Holly Kuh, Sie haben Recht! Vielen Dank!! – SoulCub

Verwandte Themen