如何将现有Java应用程序转换为SYS V服务(守护程序)

我有一个Java应用程序,我开始使用它

java -jar myapp.jar

要停止它我使用CTRL + C.

现在我需要将该应用程序转换为我可以开始的东西:

/etc/init.d/myapp start

我可以停下来:

/etc/init.d/myapp停止

问题是关于保存过程的PID,我想我在某处看到了这样做的一个方法,我不记得在哪里,我无法找到它。

我看到有一个名为Java Server Wrapper的项目,但我寻找一些不限制内存使用的免费软件。 我认为这项工作可以在一个bash脚本中完成。

看看Apache Commons Daemon 。

它有’jsvc’启动器,它支持启动和停止基于java的守护进程(服务)。

首先,将PID保存在* nix上:

$ ./yourprogram & $ echo $! > /var/run/yourpid 

yourpid现在将包含yourpgram的PID,而/ var / run是放置它的适当位置。

以上内容可以放在“开始”脚本中。 “停止”脚本可以查看yourpid以了解要杀死的内容。

如果你想要更优雅并正确地停止你的应用程序,你可以查看Tomcat的org.apache.catalina.startup.Catalina.java的源代码,了解如何实现正确的关闭钩子。

其次,上面的“stop”和“start”脚本可以放在/etc/init.d/mystopstartscript中:

 #!/bin/bash # processname: yourprogram # pidfile: /var/run/yourpid case $1 in start) sh /some/where/start.sh ;; stop) sh /some/where/stop.sh ;; restart) sh /some/where/stop.sh sh /some/where/start.sh ;; esac exit 0 

这是一个相当本土化的解决方案,其中的想法主要来自优秀的’ol Tomcat,但我希望它有所帮助:)