设置基于 Java 的程序来运行服务并在启动时启动的最佳方法是什么?
- 暴发户 (
pre-start script
和post-stop script
?) - 普通的 SysV 初始化?(
start-stop-daemon
?)
就我而言,我有兴趣建立吉拉,它有自己的 Tomcat 风格的启动和停止脚本 -$JIRA_HOME/bin/startup.sh
以及$JIRA_HOME/bin/shutdown.sh
。
答案1
大多数情况下,您可以删除这些脚本中的大量代码,只需专注于运行主程序。如果您可以告诉它在前台而不是后台运行,那么事情就会变得简单。否则,您必须使用“expect fork”或“expect daemon”来跟踪程序必须执行的分叉,以脱离控制终端。
pre-start 主要用于设置,例如在 /var/run 中创建目录。您还可以获取配置文件,因为环境将传递给主执行程序。
如果您想确保 upstart 在满足某个条件(例如端口正在回答查询)之前不会考虑启动该服务,那么 post-start 会很有帮助。
最终,目标是让它尽可能简单。如果 startup.sh 运行“jira --daemon”,而您可以运行“jira”,并且它不会分离,那么使用 upstart 您只需执行
start on runlevel [2345]
stop on runlevel [!2345]
exec jira
只要该进程不作为守护进程运行,upstart 就很容易跟踪其正在执行的操作,最终产生更简单的作业文件和更强大的系统。