使用jsvc启动java进程
使用jsvc启动java进程
apache commons daemon,apache的一个子项目。
它的说明文档很简单,它的实际用法也是。
推荐直接去官网查看它的文档。
项目地址为:
https://commons.apache.org/proper/commons-daemon/index.html
一、启动、关闭java进程时遇到的一些需求
在启动或是关闭java进程时,有时会对这些操作和进程运行状态信息提出一些要求。
1. 在查看java进程信息时,希望能隐藏部分classpath。
如果引用的jar文件比较多,那么进程信息中显示的classpath就很长,这个对查看进程信息就很不友好,尤其是在一次要查看多个java进程的情况下。
2. 有时希望能以类似同步阻塞调用的方式来启动和关闭java进程。
只有进程在完全初始化或退出后,执行调用的脚本或命令才返回。
二、相关概念
commons-daemon可以看成是一个独立的jar文件,需要引入到项目的classpath中来配合使用。
jsvc是一个可以在类Unix上运行的可执行文件。
实际使用时,需要联合commons-daemon和jsvc一起使用。
通过它们,可以使在类Unix系统上运行java进程更加容易。
比如下面的命令,使用jsvc来启动一个java进程。
jsvc -user xxx -cwd xxx -procname xxx -pidfile xxx -cp xxx ... JVM_OPTS APP_MAIN_CLASS
可以看出它和普通的java命令类似,但是多了一些前面的参数配置。
三、初识jsvc
大约在2013年或更早的时候,项目使用jsvc来启动java进程。
当初不知道是谁率先引入的jsvc,也不知道他引入jsvc是为了解决什么样的问题,反正这种方式就这么被传承下来了。
但从那时起,使用jsvc的体验就不太好。
因为每次启动时会产生两个进程,每个进程的信息中都包含了大量的classpath信息。
而且没有用到jsvc的其它功能,因此也就没有感觉到使用jsvc带来的优势。
新人可能会对这两个进程产生疑惑,到底哪个是真正的java进程。
而且每次使用