![在脚本中搜索并终止进程](https://linux22.com/image/82905/%E5%9C%A8%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%90%9C%E7%B4%A2%E5%B9%B6%E7%BB%88%E6%AD%A2%E8%BF%9B%E7%A8%8B.png)
我编写了一个脚本来停止 Tomcat 实例,删除 .war 文件和应用程序目录,将新的 .war 文件从 NFS 挂载复制到 webapps 目录,然后重新启动 Tomcat 实例。该脚本工作正常,但我担心 Tomcat 实例是否由于某种原因没有终止。如何让脚本确认守护进程已终止,如果没有找到 PID 并在进入下一步之前将其终止?带有awk
or 的sed
if语句如果可以的话应该如何构建呢?
答案1
你可以做的一件事是将tomcat的pid存储在一个文件中,然后读取该文件并在kill命令中使用pid。要存储 tomcat 的 pid,请在 tomcat 的 catalina.sh 中添加以下行
CATALINA_PID=$CATALINA_HOME/tomcat.pid
这将在您的 catalina 主目录中创建一个文件 tomcat.pid 并存储当前进程的 pid。然后你就可以使用命令
kill -9 $(cat path_to_catalina_home/tomcat.pid)
否则只需使用命令
pkill -9 tomcat_directory_name
确保“tomcat_directory_name”或您在 pkill 命令中传递的任何内容应该是唯一的,否则您最终将杀死系统中的多个进程。您也可以使用更长版本的 pkill
ps aux | grep tomcat_directory_name | grep -v grep | awk '{print "kill -9 " $2}' | bash -v
这与 pkill 的作用相同,但有点安全。您可以测试此命令,直到最后通过删除 bash -v 获得正确的 pid。