我在Tomcat应用程序服务器上遇到了一些问题。 在我能够解决Java应用程序的问题之前,我需要想出一个cron shell脚本来重新启动服务器。
我认为这将是一个简单的努力,但其中一个复杂的是,根本原因使得Tomcat在执行./shutdown.sh之后不能干净地closures。 当我运行ps auwwx |时,这个过程仍然是打开的 grep java | grep org.apache.catalina.startup.Bootstrap
我杀死了这个进程(是的,这很糟糕,但事情确实发生了 – 至今;)),我可以正确地重新启动服务器。
我不是一个shell脚本专家(或新手),我需要一些帮助“轮询”一段时间,直到上面的ps命令返回null。 投票后,我会杀死,然后重新启动。
这是一个脚本的粗略轮廓,可以做你想做的事情。 当然,你必须充实,你可以改变参数sleep (这里显示为5秒)。
#!/bin/bash while ps | grep | grep > /dev/null do sleep 5 done kill restart
如有必要,可以使用正则expression式将两个greps组合成一个。 注意:当你这样做的时候,当grep发现自己的时候有时会得到误报(虽然你的两个grep阻止了这个)。 为了避免这种情况,你可以在ps的输出中findgrep [s]omething ,它会find“… something …”但不是“grep something”。
你正在做的是一个补丁,不正确地处理Javaexception。 我明白要重新开始,我真的。 如果这是一个长期或生产项目,只要你抓住和处理错误,世界将是一个更好的地方。
(如果任何错误使得它一直备份调用堆栈,Tomcat就会死亡。)
在开发我们的产品Tcat服务器以支持可靠的重启时,我们必须解决这个确切的问题。
你可以下载Tcat服务器,看看tcat6.sh,了解我们如何解决这个问题。 如果您有具体问题,请随时在此发布。
Tcat服务器实际上是100%香草Tomcat与configurationpipe理,部署和诊断增加function – 会爱你下载,看看它是否满足您的需求。 它可以在开发中免费使用,可以从http://www.mulesoft.com/download-tcat-server-enterprise-tomcat下载。 如果您不想使用Web控制台,则可以使用curl调用Tcat Server REST API执行重新启动。
希望这可以帮助。
免责声明:我为MuleSoft工作,并大量参与Tcat服务器。
像Tomcat这样的应用程序服务器不喜欢它,如果webapps行为错误(对类加载器,内存泄漏,启动非守护进程线程等进行讨厌的事情),所以当被问到时它们不能正常closures。
首先,重启Tomcat可能是一个“正确”的事情,要保持运行直到应用程序可以修复。 接下来的事情是增加日志级别,并检查日志文件,如OutOfMemoryErrors等恶意点。如果幸运的话,Web应用程序使用日志logging,并可能指出它在做什么。
接下来的事情是将一个监控代理(visualvm.dev.java.net做得非常好)附加到Tomcat实例上。 您需要在服务器端启用JMX,然后才能远程连接。 如果您使用的是Suse Linux或类似,请不要忘记将服务器rmi主机名设置为系统属性。 观察内存消耗,在服务器挂起时进行线程转储。 当你用shutdown.sh发出一个closures请求并且服务器没有正确closures的时候,拿一个线程转储,看看哪个线程正在运行,以及它们在哪个类/方法中。
如果内存有问题,您可能需要尝试调整JVM的垃圾收集器设置,或使用其他JVM(如JRockit)。 使用更积极的GC可能会有所帮助。
另一种方法是阻止应用程序做任何错误的操作 – 使用安全pipe理器并调整安全策略文件,直到应用程序运行。 这可能意味着应用程序正在做一些它不应该做的事情。
在这里检查: http : //www.lampdocs.com/blog/2010/02/how-to-restart-tomcat-via-shell-script-using-cron/