我正在编写一个简单的 bash 脚本来关闭 tomcat,如果它不能正常停止,则检查 tomcat 的 PID 是否仍然存在并将其终止。
我将 tomcat 名称作为变量传递给脚本,如下所示。在某些情况下,我会传递两个或三个 tomcat 名称,这就是为什么下面使用 FOR LOOP
./shutdown.sh tomcat1
Shutdown.sh 脚本的内容
#!/bin/bash
for name in "$@"
do
bash /opt/$name/bin/shutdown.sh
done
sleep 30
for name in "$@"
do
process_id=`ps -ef | grep $name | grep -v grep | awk '{ print $2 }'`
if [ $process_id ]
then
kill -9 $process_id
fi
done
echo " Script Execution completed"
当 tomcat 正常关闭时,不会出现任何问题。但是当 tomcat 不停止时,我遇到了问题。
下面这段代码在命令提示符下直接运行时,会给出 tomcat 的正确进程 ID(62457)。但 shell 脚本中的同一段代码给出了三个进程 ID(62610、62611、62457)。
process_id=`ps -ef | grep $name | grep -v grep | awk '{ print $2 }'`
您能告诉我为什么我在脚本中得到了三个进程 ID 而不是一个吗?
还有其他更容易杀死的建议吗?