什么可能是自动启动tomcat实例的最好方法? 我有许多configuration为在各种端口上使用tomcat的vhost。 我确信有人遇到这个具有挑战性的pipe理任务。 你认为rc.local会做? 我不想用这么多的命令来覆盖这个文件,如果它适用,我想要一个一次性的脚本。
在linux下最好的方法是使用标准的SysV Init脚本。 这就是守护进程应该在linux下启动的方式,这是大多数系统pipe理员看起来的第一个地方。
标准是这样的。 ;)
许多发行版都带有一个框架启动脚本,您可以修改该脚本以适应某些shell函数,您可以从中获取帮助您编写启动脚本的函数库,例如在redhat上有/etc/init.d/functions 。
您可以使用它来调用Tomcat附带的标准启动脚本。 Tomcat甚至可能会附带一个SysV初始化脚本,我不记得,自从我安装了vanilla tomcat以来已经很久了。
使你的启动脚本chkconfig-able也!
我通常使用Condor来pipe理我的'工作' – 它允许你dynamic或静态分配你的应用程序,如果你愿意。 那么你应该可以使用你喜欢的任何自动启动机制,而不必让你的configuration浮动到每个人看到的地方。
为什么不在同一个tomcat实例中运行它们呢? Tomcat可以监听多个端口,并从不同的webapp目录提供不同的webapps。 调查tomcat的server.xml文档中的<engine>元素。
我会推荐像daemontools或monit 。 SysV或Debian initscripts可以在启动时启动进程,但是如果应该停止,它们不会自动重新启动实例。
对于daemontools您需要创build一个run脚本来设置用户和正确的环境variables,然后运行$TOMCAT/bin/catalina.sh run 。
对于monit您需要知道tomcat pid文件的位置,然后使用类似这样的configuration:
check process 'tomcat' with pidfile /path/to/your/tomcat/tmp/tomcat.pid start command = '$TOMCAT/bin/catalina.sh start' stop command = '$TOMCAT/bin/catalina.sh stop'
我写了一个自定义的初始化脚本,假定一个目录/ var / tomcat包含子目录,每个目录都是Tomcat实例的configuration。 它迭代每个子目录,检查conf / server.xml是否存在,如果是,则将CATALINA_BASE设置为该子目录,并使用适当的参数(stop | start)运行bin / catalina.sh脚本。