通过使用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系统上以服务方式运行的更多相关文章

  1. java程序怎么在一个电脑上只启动一次,只开一个进程

    目录 <linux文件锁flock> <NIO文件锁FileLock> <java程序怎么在一个电脑上只启动一次,只开一个进程> 方案1: 单进程程序可以用端口绑定 ...

  2. 以Windows服务方式运行.NET Core程序

    在之前一篇博客<以Windows服务方式运行ASP.NET Core程序>中我讲述了如何把ASP.NET Core程序作为Windows服务运行的方法,而今,我们又遇到了新的问题,那就是: ...

  3. [转帖]以Windows服务方式运行ASP.NET Core程序

    以Windows服务方式运行ASP.NET Core程序 原作者blog: https://www.cnblogs.com/guogangj/p/9198031.htmlaspnet的blog 需要持 ...

  4. [转帖]以Windows服务方式运行.NET Core程序

    以Windows服务方式运行.NET Core程序 原作者blog:https://www.cnblogs.com/guogangj/p/10093102.html 里面使用了NSSM 工具 但是自己 ...

  5. 连表查询都用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%我不知道在 ...

  6. java程序在windows系统作为服务程序运行

    Java程序很多情况下是作为服务程序运行的,在Un*x 平台下可以利用在命令后加“&”把程序作为后台服务运行,但在Windows下看作那个Console窗口在桌面上,你是否一直担心别的同时把你 ...

  7. JavaSE(一)Java程序的三个基本规则-组织形式,编译运行,命名规则

    一.Java程序的组织形式       Java程序是一种纯粹的面向对象的程序设计语言,因此Java程序必须以类(class)的形式存在,类(class)是Java程序的最小程序单位.       J ...

  8. 一招教你IDEA中Java程序如何打包,以及打包后如何运行

    前言 编写程序 程序打包 测试运行 IDEA作为目前按最主流的Java程序项目编写工具,越来越受到开发人员的青睐.idea因为其五花八门的功能,让你在开发过程中效率显著提高.那么对于初学者来说,如何通 ...

  9. UNIX 系统上的文本操作简介

    http://www.oschina.net/question/129540_53561 UNIX 的基本哲学之一就是创建只做一件事并将这一件事做好的程序(或进程).这一哲学要求认真考虑接口以及结合这 ...

随机推荐

  1. django中tag的用法

    在app里建一个子的python包,包含__init__.py,包名为templatetags,里面新建一个tags.py(这个名字可以随意) from django import templater ...

  2. 基于visual Studio2013解决算法导论之025双向循环链表

     题目 双向循环链表 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #in ...

  3. Citrix 服务器虚拟化之二 Xenserver加域管理

    Citrix 服务器虚拟化之二   Xenserver加域管理 如果要使用多个用户和用户组来管理XenServer服务器,就必须使用 Active Directory 用户账户进行身份验证.XenSe ...

  4. C# 多媒体播放器

    //停止播放 public void stopFile() { axWindowsMediaPlayer1.Ctlcontrols.stop(); } //暂停文件 public void pause ...

  5. winform判断输入是否是数字

    private bool IsNum(string str) { try { foreach (char c in str) { if (char.IsDigit(c)) return true; r ...

  6. BZOJ 1305: [CQOI2009]dance跳舞( 最大流 )

    云神代码很短...0 ms过的...看了代码 , 大概是贪心... orz 我不会证 数据这么小乱搞就可以了吧... ←_← 这道题网络流还是可以写的... 既然限制了最多只能和 k 个不喜欢的人da ...

  7. jetty插件开发配置

    <plugins> <!-- jetty插件 --> <plugin> <groupId>org.mortbay.jetty</groupId&g ...

  8. fg、bg、jobs、&、nohup、ctrl + z命令

    fg.bg.jobs.&.nohup.ctrl + z命令 一.& 加在一个命令的最后,可以把这个命令放到后台执行,如gftp &, 二.ctrl + z 可以将一个正在前台执 ...

  9. 不可表示的数[x/2] + y + x * y

    前端是时间在庞果网上看到不可表示的数的编程题(如下),我自己也试着解答了一下,写的算法虽然没有没有错,但是跑了一些还只是跑到a8,后来到自己整理一下网上的解答过程,虽然解答写的很清晰,但是有些知识还是 ...

  10. 11181 - Probability|Given

    N friends go to the local super market together. The probability of their buying something from them ...