原测试脚本如下
#!/bin/bash
PID=`ps -ef | grep $1 | grep -v grep | awk '{print $2}'`
echo $PID
echo `ps -ef | grep $1 | grep -v grep | awk '{print $2}'`
然而结果却查出多个pid,而且每次执行脚本pid都会变
所以我怀疑有该程序的干扰进程。果然查到有tail干扰进程
优化后,这下总算没有了
PID=`ps -ef | grep $1 | grep -v grep | grep -v tail | grep -v sh | awk '{print $2}'`
echo $PID
echo `ps -ef | grep $1 | grep -v grep | grep -v tail | grep -v sh | awk '{print $2}'`
完整重启脚本
#!/bin/bash
pid_is_exist(){
PID=`ps -ef | grep $1 | grep -v grep | grep -v tail | grep -v sh | awk '{print $2}'`
if [ -z "${PID}" ]
then
return 1
else
return 0
fi
}
start(){
#backup
cp $1 backup/`date "+%Y%m%d"`-$1;
pid_is_exist $1
if [ $? -eq 0 ]
then
echo "$1 is already running. pid=${PID}"
else
nohup java -jar $1 > $app.log 2>&1 &
tail -200f $app.log
fi
}
stop(){
pid_is_exist $1
if [ $? -eq 0 ]
then
kill -15 ${PID}
while true
do
pid_is_exist $1
if [ $? -eq 0 ]; then
echo sleep 3s, waiting for application:${PID} to stop
sleep 3
else
echo the process ${PID} has already stopped
break
fi
done
else
echo Application has already stopped
fi
}
restart(){
stop $1
start $1
}
restart $1