如何设置基于 Java 的启动服务?

如何设置基于 Java 的启动服务?

设置基于 Java 的程序来运行服务并在启动时启动的最佳方法是什么?

  • 暴发户 (pre-start scriptpost-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 就很容易跟踪其正在执行的操作,最终产生更简单的作业文件和更强大的系统。

相关内容