2016-06-08 149 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