问题
在编写项目启动脚本时,遇到一个莫名其妙的问题,脚本在尝试kill掉项目原进程后就不再执行了。 shell
echo "关闭jar服务"
pidList=$(ps aux | grep $projectName | grep -v grep | awk '{print $2}')
for pid in $pidList
do
kill -9 $pid
echo 'kill pid '$pid
done
执行结果是到这里就结束了。最后提示 “已杀死”。
解决
其实还是自己挖的坑,但是也是极有可能被忽略的。 问题出在脚本的命名上,正常习惯是 xxxx项目,deploy-xxxx.sh,好了 $projectName=xxxx;导致脚本pidList包含了deploy-xxxx.sh,最后自己kill掉了自己!
- 方案一:修改shell脚本名,不能包含项目名;
- 方案二:修改脚本,使其查找粒度更细;或者过滤掉脚本自身的pid;
一般都采用方案二,毕竟shell脚本命名不和项目名挂钩,后面就有得找了。
原来:pIdList=$(ps aux | grep ${projectName} | grep -v grep | awk '{print $2}')
修改:pIdList=$(ps aux | grep ${projectName}.jar | grep -v grep | awk '{print $2}')
|