我的 Tomcat 应用服务器出现了一些问题。在修复 Java 应用的问题之前,我需要编写一个 cron shell 脚本来重启服务器。
我以为这会是一个简单的任务,但有一个复杂之处是,根本原因是 Tomcat 在执行 ./shutdown.sh 后无法干净地关闭。当我运行 ps auwwx | grep java | grep org.apache.catalina.startup.Bootstrap 时,该进程仍然打开
我杀死了 -9 该进程(是的,这很糟糕,但事情确实进展顺利 - 到目前为止;))并且我可以正确地重启服务器。
我不是 shell 脚本专家(或者说新手),我需要一些帮助来进行一段时间的“轮询”,直到上面的 ps 命令返回 null。轮询期过后,我会终止进程,然后重新启动。
答案1
这是可以执行您想要的操作的脚本的粗略大纲。当然,您必须充实它,并且可以将参数更改为sleep
(此处显示为五秒)。
#!/bin/bash
while ps | grep | grep > /dev/null
do
sleep 5
done
kill
restart
如果需要,您可以使用正则表达式将两个 grep 合并为一个。注意:当您执行此类操作时,有时在grep
find 自身时可能会得到误报(尽管您的两个 grep 可以防止这种情况)。为了避免这种情况,您可以执行grep [s]omething
which ,这将在 的输出中找到“...something...”但不找到“grep something” ps
。
答案2
你所做的是对无法正确处理 Java 异常的修补。我理解想要重启的想法,真的,我理解。如果这是一个长期项目或生产项目,只要你捕获并处理错误,世界就会变得更美好。
(如果任何错误导致 Tomcat 一路回到调用堆栈,Tomcat 将死亡。)
答案3
在开发我们的产品 Tcat Server 以支持可靠重启时,我们必须解决这个确切的问题。
您可以下载 Tcat Server 并查看 tcat6.sh 以了解我们如何解决问题。如果您有具体问题,请随时在此处发帖。
Tcat Server 实际上是 100% 纯 Tomcat,并添加了配置管理、部署和诊断功能 - 希望您下载并查看它是否满足您的需求。它可免费用于开发,可从以下网址下载:http://www.mulesoft.com/download-tcat-server-enterprise-tomcat。如果您不想使用 Web 控制台,您可以使用 curl 调用 Tcat Server REST API 来执行重新启动。
希望这可以帮助。
免责声明:我在 MuleSoft 工作,并深度参与 Tcat Server。