当年写过一篇文章,怎么在linux下将java作为daemon运行:将Java作为守护进程运行。这个方法还不错,但是针对的面有点狭窄,必须使用start-stop-daemon这个命令,在没有这个命令的MAC系统,问题就稍嫌麻烦了。不过这个方法也有它的优点,就是不需要代码层面的改动。

今天介绍一个通用的将java作为守护进程启动的方法,使用的工具是apache的daemon包,这个东西最早来自于tomcat,后来单独分离了出来。主页在:http://commons.apache.org/proper/commons-daemon/index.html,我们最主要需要的是里面的jsvc命令:http://commons.apache.org/proper/commons-daemon/jsvc.html

安装:

首先下载源代码:http://commons.apache.org/proper/commons-daemon/download_daemon.cgi

下载完成后,解压缩,然后:

  • cd commons-daemon-xxx/src/native/unix/
  • ./support/buildconf.sh
  • ./configure --with-java=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK --with-os-type=MacOS
  • make
  • sudo cp ./jsvc /usr/local/bin/

这样就安装好了,使用 jsvc -help来查看jsvc是否可以使用,which jsvc来查看jsvc命令的位置

使用:

jsvc的使用稍微有点麻烦,因为它需求代码中的入口Main类实现Daemon接口,需要改动代码。这里给出stackoverflow的两个帖子:

几个点,可以稍微看下:

几个链接:

Check out the Jakarta Commons Daemon documentation. There's an example of how to implement the Daemon interface on their wiki. Once you've implemented Daemon, you should be able to start the process by following the "Starting jsvc" and "Using jsvc" docs.

关于wait参数:

When the -wait parameter is used, the launcher process waits until the controller says "I am ready", otherwise it returns after creating the controller process.

稍后等我有了实践经验我会继续更新。