我有一个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现在将包含yourgram的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,但我希望它有所帮助:)