8

我有一个 Java 应用程序,要启动它我使用

java -jar myapp.jar

为了阻止它,我使用 CTRL+C。

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

/etc/init.d/myapp 启动

我可以停止:

/etc/init.d/myapp 停止

问题全在于保存进程的PID,我想我在某个地方看到了这样做的秘诀,我不记得在哪里,我也找不到它。

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

4

2 回答 2

11

看看Apache Commons Daemon

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

于 2009-01-02T15:18:22.443 回答
8

首先,在 *nix 上保存 PID:

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

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

以上可以放在你的“开始”脚本中。“停止”脚本可以查看您的pid 以知道要杀死什么。

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

其次,可以将上面的“停止”和“启动”脚本放在 /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,但我希望它有所帮助:)

于 2009-01-05T02:56:12.877 回答