jsvc
是个什么是么高端武器呢
全称:Java Service
还是没有弄明白是什么,那就继续往下看。
我们赞不讨论 tomcat 应不应该运行在80端口上。
假如我们有需求,需要 tomcat 运行在 80 端口上。
那么一个限制就出现了。*nix
操作系统只用root权限才能坚挺1024已下的端口。
虽然我们可以让 tomcat 启动后 以tomcat
用户的权限工作。这样安全性就可以得到保障。
但是我们还有更强的方案。他就是jsvc
当然 jsvc 可不仅仅就这么一点功能。
我们通过 jsvc 可以很简单的 封装我们自己的 启动脚本,
还可以 随意制定 tomcat 运行用户和租,还可以指定 jvm 的运行参数例如内存控制,语言,编码控制。
我们还可以指定 tomcat 启动是的 pidfile 总之我们可以更精细的控制tomcat的运行方式。比原始脚本拥有无法比拟的优势。
既然 jsvc 的有点有那么多。那到底怎么做呢。
jsvc是一套用c编写的程序,是tomcat发行版自带的一套代码。是Jakarta Commons Daemon 工程的一个复制品。只有该版本的jsvc是绑定到tomcat二进制发行版中。这意味着它要与该版本的Tomcat一同使用。
在 tomcat 8.0 版本中 jsvc 的源代码包tomcat/bin/commons-daemon-native.tar.gz
我们找到该tar包,准备编译成二进制文件
$ tar -zxvf commons-daemon-native.tar.gz$ cd commons-daemon-1.0.15-native-src$ ./configure --with-java=$JAVA_HOME$ make
编译完成以后,会产生一个jsvc的二进制可执行文件
$ ./jsvc --helpUsage: jsvc [-options] class [args...]Where options include: -help | --help | -? show this help page (implies -nodetach) -jvm <JVM name> use a specific Java Virtual Machine. Available JVMs: 'server' -client use a client Java Virtual Machine. -nodetach don't detach from parent process and become a daemon -debug verbosely print debugging information -check only check service (implies -nodetach) -user <user> user used to run the daemon (defaults to current user) -verbose[:class|gc|jni] enable verbose output -cwd </full/path> set working directory to given location (defaults to /) ........ ........jsvc (Apache Commons Daemon) 1.0.15-devCopyright (c) 1999-2013 Apache Software Foundation.
相信看到 现象以后大家大概已猜出jsvc到底是干什么的了。对他就是tomcat的守护进程管理工具
怎么使用呢?
如果你的 tomcat 还在运行那么他大概会是这样的
$ ps auwx | grep java/usr/bin/java-Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
我们想换做 jsvc 管理的话,只需要将 java 换成jsvc就可以了
$ ./jsvc -user tomcat -pidfile /var/run/jsvc.pid -Djvm=tomcat -Xmx50M-Xms50M -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
我指定了 tomcat 运行的用户身份是tomcat用户指定了pidfile在/var/run/jsvc.pid
同时限制了tomcat运行的内存限制
小伙伴们看到这儿了。就不用我多说了。有了 jsvc tomcat 控制tomcat就完全不在话下了。
可能小伙伴么已经发现了 jsvc 的-stop
选项。对的,jsvc 可以关闭tomcat.也很简单
$ ./jsvc -stop -pidfile /var/run/jsvc.pid org.apache.catalina.startup.Bootstrap stop
有趣的是 最后的 stop 不加 也可以正常停止 tomcat
你可以这么理解。应为我们使用了jsvc 的停止tomcat的功能,此时完全不需要自多余制定一个 stop 参数了。
到这里 小伙伴们 应该 对tomcat更有把握了。