使用apache daemon让java程序在unix系统上以服务方式运行
通过使用apache_commons_daemon,可以让Java程序在unix系统上以服务器的方式运行。
当然,通过wrapper也是可以达到这样的目的,wrapper还可以指定java应用中用到的第三方jar目录,由wrapper统一加载,很方便。详细使用方法见“wrapper在unix下的使用”。
apache daemon的安装与使用
1、运行环境:
unix 64bit
jre 1.6.x
apache commons daemon 10.15,daemon较低的版本在安装上会有些差别,如:无法在64位的unix系统上找到libcap*.so文件等
而10.15版本在这方面增加了一些校验,使用起来比较方便。
2、安装jsvc
jsvc是apache commons daemon自带的,通过jsvc我们才可以达到java程序在unix系统上以service的方式运行,如:tomcat
首先,我们先下载apache commons daemon jar包和源码,下载地址:
http://commons.apache.org/proper/commons-daemon/download_daemon.cgi
源码中包含了jsvc和一些demo。
开始安装:
#cd /home/jsvc/
#tar zxvf commons-daemon-1.0.15-src.tar.gz
#cd commons-daemon-1.0.15-src/native/unix
#chmod 755 ./support/buildconf.sh
#./support/buildconf.sh
./support/buildconf.sh: configure script generated successfully
# ./configure --with-java=/usr/java/jdk1.6.0_35
.....
*** All done ***
Now you can issue "make"
#make
至此jsvc已经安装成功,接下来我们编写一个java app
3、编写一个java demo:
package com.jason.jsvc; import org.apache.commons.daemon.Daemon;
import org.apache.commons.daemon.DaemonContext;
import org.apache.commons.daemon.DaemonInitException; /**
* @date 2013-6-21
* @author Jason
*/
public class JsvcTest implements Daemon { /* (non-Javadoc)
* @see org.apache.commons.daemon.Daemon#destroy()
*/
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("JsvcTest destory method...");
} /* (non-Javadoc)
* @see org.apache.commons.daemon.Daemon#init(org.apache.commons.daemon.DaemonContext)
*/
@Override
public void init(DaemonContext ctx) throws DaemonInitException, Exception {
// TODO Auto-generated method stub
System.out.println("JsvcTest init method..."+ctx.toString());
} /* (non-Javadoc)
* @see org.apache.commons.daemon.Daemon#start()
*/
@Override
public void start() throws Exception {
// TODO Auto-generated method stub
System.out.println("JsvcTest start method...");
} /* (non-Javadoc)
* @see org.apache.commons.daemon.Daemon#stop()
*/
@Override
public void stop() throws Exception {
// TODO Auto-generated method stub
System.out.println("JsvcTest stop method...");
} }
将该demo打包成jscv_test.jar,并连同commons-daemon-10.15.jar一起放到:/home/jsvc/app/目录下备用。
4、编写jsvc脚本
vi /etc/init.d/jsvc
#!/bin/sh # # chkconfig: - 60 50 # description: test a daemon. # processname: jsvc # Source function library. . /etc/rc.d/init.d/functions RETVAL=0
prog="jsvc"
JAVA_HOME=/usr/java/jdk1.6.0_35
APP_HOME=/home/jsvc/app #jsvc所在的目录
DAEMON_HOME=/home/jsvc/native/unix APP_USER=root
TMP_DIR=/home/jsvc/app/tmp
PID=/home/jsvc/app/jsvc_stat.pid
CLASSPATH=$CLASSPATH:/home/jsvc/app/jsvc_test.jar:/home/jsvc/app/commons-daemon-1.0.15.jar case "$1" in start) # # Start Serivce # $DAEMON_HOME/jsvc -user $APP_USER -home $JAVA_HOME -Djava.io.tmpdir=$TMP_DIR -wait 5000 -pidfile $PID -outfile $APP_HOME/log/jsvc.out -errfile '&1' -cp $CLASSPATH com.jason.jsvc.JsvcTest # # To get a verbose JVM #-verbose \ # To get a debug of jsvc. #-debug \ exit $? ;; stop) # # Stop Serivce # $DAEMON_HOME/jsvc -stop -pidfile $PID com.jason.jsvc.JsvcTest exit $? ;; *) echo "Usage myjsvc start/stop" exit 1;; esac
5、为unix添加服务
chmod 777 /etc/init.d/jsvc
chkconfig --add jsvc
chkconfig --list | grep jsvc
chkconfig --level 345 jsvc on
6、启动与关闭jsvc服务
service jsvc start
service jsvc stop
查看脚本中指定的日志目录,会发现一些日志输出:
JsvcTest init method...org.apache.commons.daemon.support.DaemonLoader$Context@6d9efb05
JsvcTest start method...
JsvcTest stop method...
JsvcTest destory method...
使用apache daemon让java程序在unix系统上以服务方式运行的更多相关文章
- java程序怎么在一个电脑上只启动一次,只开一个进程
目录 <linux文件锁flock> <NIO文件锁FileLock> <java程序怎么在一个电脑上只启动一次,只开一个进程> 方案1: 单进程程序可以用端口绑定 ...
- 以Windows服务方式运行.NET Core程序
在之前一篇博客<以Windows服务方式运行ASP.NET Core程序>中我讲述了如何把ASP.NET Core程序作为Windows服务运行的方法,而今,我们又遇到了新的问题,那就是: ...
- [转帖]以Windows服务方式运行ASP.NET Core程序
以Windows服务方式运行ASP.NET Core程序 原作者blog: https://www.cnblogs.com/guogangj/p/9198031.htmlaspnet的blog 需要持 ...
- [转帖]以Windows服务方式运行.NET Core程序
以Windows服务方式运行.NET Core程序 原作者blog:https://www.cnblogs.com/guogangj/p/10093102.html 里面使用了NSSM 工具 但是自己 ...
- 连表查询都用Left Join吧 以Windows服务方式运行.NET Core程序 HTTP和HTTPS的区别 ASP.NET SignalR介绍 asp.net—WebApi跨域 asp.net—自定义轻量级ORM C#之23中设计模式
连表查询都用Left Join吧 最近看同事的代码,SQL连表查询的时候很多时候用的是Inner Join,而我觉得对我们的业务而言,99.9%都应该使用Left Join(还有0.1%我不知道在 ...
- java程序在windows系统作为服务程序运行
Java程序很多情况下是作为服务程序运行的,在Un*x 平台下可以利用在命令后加“&”把程序作为后台服务运行,但在Windows下看作那个Console窗口在桌面上,你是否一直担心别的同时把你 ...
- JavaSE(一)Java程序的三个基本规则-组织形式,编译运行,命名规则
一.Java程序的组织形式 Java程序是一种纯粹的面向对象的程序设计语言,因此Java程序必须以类(class)的形式存在,类(class)是Java程序的最小程序单位. J ...
- 一招教你IDEA中Java程序如何打包,以及打包后如何运行
前言 编写程序 程序打包 测试运行 IDEA作为目前按最主流的Java程序项目编写工具,越来越受到开发人员的青睐.idea因为其五花八门的功能,让你在开发过程中效率显著提高.那么对于初学者来说,如何通 ...
- UNIX 系统上的文本操作简介
http://www.oschina.net/question/129540_53561 UNIX 的基本哲学之一就是创建只做一件事并将这一件事做好的程序(或进程).这一哲学要求认真考虑接口以及结合这 ...
随机推荐
- html向servlet传乱码解决办法
html 设置为utf-8格式 <meta http-equiv="content-type" content="text/html;charset=UTF-8&q ...
- Struts2、spring2、hibernate3在SSH中各起什么作用
简单的说: struts 控制用的 hibernate 操作数据库的 spring用解耦的 详细的说: STRUTS 在 SSH 框架中起控制的作用 , 其核心是 Controller, 即 Acti ...
- Spring IOC(DI)之注入方式
一次被问到IOC的注入方式,当时脑袋一阵混乱,不知道噻.于是google了一下,发现众说纷纭,有说三种的,有说四种的.都滚犊子吧,还是看看官方文档吧. DI exists in two major v ...
- 流行的Python项目汇总
年有哪些流行的Python项目呢?下面,我们一起来看下. 一.测试和调试 python_koans :Python Koans 算 “Ruby Koans” 的一部分,作为交互式教程,可以学习 TDD ...
- “快的打车”创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - V2EX
"快的打车"创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - ...
- 软件顾问可视设计的得力助手——PowerMockup
你可能是一位从事信息化的软件顾问,你也可能是一位软件设计师,你须要通过图形直观的向客户表达你的设计意图. 你可能已经积累了非常多的Powerpoint图形元素,但每次都要从以往的文件里到处寻找,浪费您 ...
- PHP升级之后$SESSION丢失
要在生产环境为一个内部系统升PHP版本,由5.3升成5.4.16 生成以后发现不能login,一路打断点过去,发现服务器端两个页面跳转的时候,取不到$SESSION 悲催的上网找解决方案,结果发现各种 ...
- HTML5 上播放视频格式兼容性
视频格式 当前,video 元素支持三种视频格式: 格式 IE Firefox Opera Chrome Safari Ogg No 3.5+ 10.5+ 5.0+ No MPEG 4 9.0+ No ...
- C#利用lambda实现委托事件的挂接
转自:http://www.cdtarena.com/cpx/201307/9287.html在写一个小程序的时候,碰到了这样的问题,需要用委托来挂接事件,但是又想在这事件中使用局部的变量,而委托一旦 ...
- java设计模式之——适配器模式
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的用途 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极.阴极 ...