jsvc 启动Java 在Linux下的实现原理
jsvc 是在apache的daemon项目下开源项目,主要功能可以使一些运行在普通用户下的java进程获取一些root权限下的权利,比如端口在1024下等。
如何运行
在自己的java代码中,实现start, init , stop,destroy的方法,将自己的编译打成jar文件, 通过调用jsvc 来启动
./jsvc -java-home /usr/java/jdk1.7.0_09/ -user nobody -pidfile /opt/apache-tomcat_1/logs/catalina-daemon1.pid -wait 10 -errfile "/tmp/error" -outfile "/tmp/output" -debug -classpath /root/test.jar:/root/commons-daemon.jar test
几个注意点:
commons_daemon.jar文件是用于调用你的class文件,
关于-java-home, 在这里有一个bug(https://issues.apache.org/jira/browse/DAEMON-268),哪怕指定,也会指定为默认的/usr/java
其他的请参考jsvc --help
实现原理
jsvc 是一个源码是c的程序,通过fork出子进程去启动java,而进程成为控制进程,可以实现监视java子进程的目地。
改变启动虚拟机的进程的用户id, 和用户组
通过调用setgid,setuid来改变当前进程的用户id,和组,这里要注意的是当改变用户id,和组的时候,当前进程会改变进程的capability, 所以需要reset 进程的capability。
查看