之前要想在系统开机启动一个Java进程,一般都是用脚本写到rc.local中。
还有一种办法是写了个服务脚本把它注册到系统服务,也可以开机启动。并可以通过service命令进行管理。
JavaServiceWrapper就是帮我们来做这个事。
下载地址在这里:
外链网址已屏蔽
有三个版本,社区版本是免费的。其他要钱也更高级,可以管理服务进程的一些异常情况。对于注册服务来说,社区版本也够用了。
我的原进程就是一个单一个jar包,把所有的依赖都打到一起了。通过下面的脚本启动:
java -jar xxx.jar
这个wrapper怎么用呢。下面就以linux版本做一个例子。
文件复制
下载linux对应版本后解压,从里面找到以下几个文件放到我的程序目录下:
wrapper
wrapper.conf
libwrapper.so
wrapper.jar
demoapp
修改wrapper.conf
这个是wrapper在启动服务时的一些配置,主要改动如下,其他详细配置可看官方文档。
wrapper.lang.encoding=UTF-8
mand=/usr/local/jdk1.8.0_60/bin/java
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperJarApp
wrapper.java.classpath.1=./wrapper.jar
wrapper.java.classpath.2=/usr/local/jdk1.8.0_60/lib/dt.jar
wrapper.java.classpath.3=/usr/local/jdk1.8.0_60/lib/tools.jar
wrapper.java.classpath.4=./xxx.jar
wrapper.java.classpath.5=./log4j2.xml
wrapper.java.classpath.6=META-INF/MANIFEST.MF
wrapper.java.library.path.1=./
wrapper.app.parameter.1=./xxx.jar
wrapper.console.title=@app.long.name@
wrapper.name=@app.name@
wrapper.displayname=@app.long.name@
wrapper.description=@app.description@
修改demoapp
改为当前程序要注册的服务的信息
# Application
APP_NAME="xxx-service"
APP_LONG_NAME="xxx service"
# Wrapper
WRAPPER_CMD="./wrapper"
WRAPPER_CONF="./wrapper.conf"
执行demoapp install
将服务注册到系统
demoapp install
再启动一下系统就OK了
通过jps -lm可以看到启动的进程信息
1464 org.tanukisoftware.wrapper.WrapperJarApp ./xxx.jar
ps -ef | grep java 一下能看到启动了两个进程,有一个是wrapper。
netstat -ntap 还能看到这两个进程之间有一个内部通信连接。
再用service xxx-service status看一下服务状态, xxx-service 是在demoapp脚本里写的名称
xxx service is running: PID:1462, Wrapper:STARTED, Java:STARTED