`
mozhenghua
  • 浏览: 324524 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

将java程序成为linxu的系统服务

阅读更多

在分布式环境开发中经常会使用socket,或者使用rmi来对外提供服务,常用的办法是将写一个java代码,然后部署到服务器上,但是问题来了。如何将这个服务成为一个可靠的系统服务,不会应为风吹草动就挂了,那就不好了。

 

       仔细看一下apache tomcat的启动也是靠deamon来启动的,大家想要在服务端部署一个类似socket服务程序,都喜欢将这个应用程序部署在tomcat这个样web容器中,其实根本没有必要,tomcat启动的时候会使用大量和j2ee相关的资源,所以应该直接使用deamo来启动应用程序,保持整个工程结构尽量简单。

 

所以想到使用apache commons 下面的daemon框架来充当守护进程。首先需要在系统中安装jsvc工具具体操作方法这里不作详细说明,请查看 http://commons.apache.org/daemon/jsvc.html

 

最后jsvc安装成功之后需要有执行 jsvc -help 会显示以下内容:

 

./jsvc -help
Usage: 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:
            'client' 'server'
    -client
        use a client Java Virtual Machine.
    -server
        use a server Java Virtual Machine.
    -cp / -classpath <directories and zip/jar files>
        set search path for service classes and resouces
    -home <directory>
        set the path of your JDK or JRE installation (or set
        the JAVA_HOME environment variable)
    -version
        show the current Java environment version (to check
        correctness of -home and -jvm. Implies -nodetach)
    -showversion
        show the current Java environment version (to check
        correctness of -home and -jvm) and continue execution.
    -nodetach
        don't detach from parent process and become a daemon
    -debug

另外需要编写一个deamon的回调接口实现,这个实现是和 deamon 沟通的桥梁,当deamon启动的时候,会调用这个接口中的回调接口,在回调的start()方法中可以写自己的业务逻辑,代码如下:

 

 

import org.apache.commons.daemon.Daemon;
import org.apache.commons.daemon.DaemonContext;
import org.apache.commons.daemon.DaemonInitException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class LaunchServer implements Daemon {
	private static final ApplicationContext spring_context;
	private static final Log log = LogFactory.getLog(LaunchServer.class);
	private FeebackServer feebackServer;
	static {
	  //加载spring上下文
		spring_context = new ClassPathXmlApplicationContext(
				"/config/terminator-job-trigger-config-context.xml",
				"/config/terminator-job-trigger-server-context.xml",
				"/config/terminatorTriggerBizDal-datasource-context.xml");
	}
	@Override
	public void destroy() {

	}
	@Override
	public void init(DaemonContext context) throws DaemonInitException,
			Exception {	
	}

	@Override
	public void start() throws Exception {
    // 启动业务逻辑
		this.feebackServer = spring_context.getBean("feebackServer",
				FeebackServer.class);
		log.info("LaunchServer started,waiting client register");
	}

	@Override
	public void stop() throws Exception {
		this.feebackServer.dispose();
	}

}

 maven依赖:

<dependency>
         <groupId>commons-daemon</groupId>
         <artifactId>commons-daemon</artifactId>
         <version>1.0.5</version>
</dependency>

 

接下来需要编写一个shell脚本,来控制该系统服务启动或者停止,详细请操作如下脚本:

 

#!/bin/bash


CLASSPATH=./trigger-server/terminator-job-trigger-server-3.1.0-SNAPSHOT.jar

for P in `ls -F ./trigger-server/dependency/`
do
 CLASSPATH=$CLASSPATH:./trigger-server/dependency/$P
done


#echo $CLASSPATH

export JAVA_HOME=/opt/taobao/java



start(){
   echo "starting" 


   /home/baisui/commons-daemon-1.0.10-native-src/unix/jsvc  -pidfile ./pidfile.pid -outfile ./logs/trigger_server_out.log -errfile ./logs/trigger_server_err.log  -cp $CLASSPATH com.taobao.terminator.trigger.LaunchServer



   echo "start successful"
}

stop(){
 /home/baisui/commons-daemon-1.0.10-native-src/unix/jsvc -stop -pidfile ./pidfile.pid -cp $CLASSPATH com.taobao.terminator.trigger.LaunchServer

 echo "trigger_server stopped"
}




case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        start
    ;;
    *)
        usage
    ;;
esac     

           这样可以使用一下脚本来控制系统服务的状态了:

 

  1. sh start.sh start 启动服务
  2. sh start.sh stop  停止 服务
  3. sh start.sh restart 重启 服务
分享到:
评论

相关推荐

    java上传文件到linux服务器,操作linux服务器上文件,下载linux服务器文件,删除linux服务器文件

    Linux服务器是一种基于Linux操作系统并提供网络服务的计算机系统,而Java作为一种跨平台的编程语言,能够通过SSH(Secure Shell)协议与Linux服务器进行通信。SSH是一种安全的网络协议,用于在网络中传输命令和数据...

    linux下运行java程序

    这篇博文将深入探讨如何在Linux系统中配置Java环境并执行Java程序。 首先,确保你的Linux系统已经安装了Java Development Kit (JDK)。JDK包含了运行和开发Java应用程序所需的所有工具,包括Java虚拟机(JVM)。你...

    Linux系统设计-将Java程序部署成系统服务的工具源码,支持windows 、Linux 等多种操作系统

    所有源码均经过严格测试,可以直接运行,可以放心下载使用。...许多知名的科学计算软件都在Linux上开发和运行,Linux系统在各个领域都有广泛的应用,其强大的功能和灵活性使得它成为许多产品和服务的基础架构。

    linuxJava8_32.tar.zip

    解压完成后,用户将能够获得完整的JDK安装包,可以进一步在系统中进行安装和配置,以支持Java程序的开发和运行。 JDK是Java开发和运行环境的核心组件,包含Java编译器、Java虚拟机(JVM)、Java类库以及各种开发...

    用Java快速开发Linux GUI应用.pdf

    本文提供了一种使用Java语言快速开发Linux GUI应用程序的方法,旨在帮助开发者快速开发出高质量的GUI应用程序,从而提高Linux操作系统的应用价值。 知识点: 1. Linux操作系统的普及和应用程序开发的重要性 2. ...

    嵌入式Linux和Java 技术

    随着信息技术的飞速发展,嵌入式系统的应用领域日益广泛,而嵌入式Linux与Java技术的结合成为了这一领域的热点话题。这两种技术的融合不仅提高了系统的灵活性与可扩展性,还为嵌入式开发人员提供了更加高效、便捷的...

    java 11下载,版本 11.0.17, linux各版本

    对于Linux用户来说,Java 11的Linux版本是必不可少的,因为Linux是许多服务器和开发环境的首选操作系统。Linux有多种发行版,如Ubuntu、CentOS、Fedora、Debian等,而Java 11的Linux安装包通常可以跨多个发行版通用...

    海康威视监控LINUX版本和WINDOWS版本JAVA实例

    描述中提到的“JAVA写的海康威视监控LINUX系统和WINDOWS系统的实例”,意味着我们手头可能有一个实际的代码示例,用于演示如何与海康威视的监控设备通信。这可能涉及到网络通信协议,如HTTP、RTSP(实时流协议)或者...

    基于Java的Linux远程登录系统研究与实现.pdf

    基于Java的Linux远程登录系统研究与实现涉及了Java编程语言、Linux操作系统、远程登录技术以及跨平台应用开发等方面的知识。 首先,Java语言具备了良好的跨平台性,这使得基于Java开发的应用可以运行在不同操作系统...

    javaAPI,linuxAPI,htmlAPI

    学习Java API是成为一名合格的Java程序员的基础,通过熟练掌握这些API,开发者可以构建出稳定且高效的程序。 其次,Linux API是一组供操作系统内核和应用程序之间交互的接口,它定义了系统调用的规范。Linux API...

    纯Java方式可在Linux下访问MS access的mdb数据库的开源库

    在IT行业中,数据库管理系统是数据存储和处理的...总之,UCanAccess为Java开发者提供了一个在Linux系统上访问和操作MS Access数据库的有效途径,极大地扩展了Java应用的数据源选择,使得跨平台的数据集成变得更加便捷。

    java jdk1.8 Linux版本

    在Linux系统中,Java JDK通常通过下载tar.gz格式的压缩包,然后解压到指定目录,如 `/usr/lib/jvm`。解压后,需要设置环境变量JAVA_HOME、PATH和CLASSPATH,以便系统能够找到Java可执行文件和库。这些变量可以通过...

    java开发用到的linux和flash

    文件“linux和flash配置”很可能是关于如何在Linux系统上配置和运行Flash内容的指南,包括安装Flash插件、设置权限、解决兼容性问题等。对于那些仍需处理Flash内容的Java开发者来说,这份文件将是宝贵的参考资料。 ...

    linux上通过sh方式启动java jar程序并做为守护进程

    3. `MAIN_CLASS`变量定义了Java程序的主要类名,这是JAR文件的入口点。 4. 使用`nohup`命令启动Java应用,它可以防止进程在接收到HUP(挂断)信号时被终止,这通常发生在用户注销或终端关闭时。 5. `&`符号使得Java...

    JAVA in embedded linux system

    - **可移植性**:由于Java程序的编译结果是字节码,而不是特定平台的机器码,因此很容易将Java程序从一个平台移植到另一个平台。 - **多线程支持**:Java提供了内置的多线程支持,使得开发者能够轻松地编写并发程序...

    Linux Apache Web服务器上的ASP实现方案.pdf

    Apache 是一种常用的 Linux Web 服务器软件包,因其装机数多、版本更新快、应用可靠而成为众多 Linux 系统的首选。 ASP(Active Server Pages)是一种服务器端动态网页实现方案,由微软发布。它可以在 Windows ...

    java 19下载,版本 19.0.1, linux各版本

    总之,Java 19.0.1为Linux用户提供了一个强大的开发环境,它带来了诸多改进和新特性,提升了开发者的生产力和应用程序的性能。通过下载和安装适合的Linux版本,开发者可以充分利用这些更新,为他们的项目带来更高效...

    将Unix应用程序移植到Linux系统详解

    标题中的“将Unix应用程序移植到Linux系统详解”指的是将原本在Unix操作系统上运行的应用程序转换为能在Linux系统中运行的过程。这个过程对于那些希望利用Linux的开放性、灵活性和广泛硬件支持的企业和开发者来说...

Global site tag (gtag.js) - Google Analytics