19,615
社区成员
发帖
与我相关
我的任务
分享
#!/bin/bash
basepath=$(cd `dirname $0`; pwd)
echo $basepath
parentPath=$(dirname $basepath)
echo $parentPath
tomcatName=$(basename $parentPath)
echo $tomcatName
pid=$(ps -ef | grep $tomcatName | grep -v grep | grep -v "$0" | awk '{print $2 }')
if [ -n "$pid" ];then
kill -9 $pid
fi
exec "$basepath"/startup.sh
还以为是bash的bug...
原来是因为,如果用绝对路径执行时, 由于路径中存在tomcat, 所以也匹配, 但grep -v grep 并没有过滤...
如果把:
pid=$(ps -ef | grep $tomcatName | grep -v grep | grep -v "$0" | awk '{print $2 }')
改成:
pid=$(ps -ef | grep "org.apache.catalina.startup.Bootstrap" | grep -v 'grep' | awk '{print $2}')
应该就可以了