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

[非常简单]Linux下启动java程序的通用脚本sh(可用作开机启动service脚本)

 
阅读更多
如果未设置JAVA_HOME环境变量,需要手动指定
#JDK所在路径
JAVA_HOME=/root/JDK/jdk1.6.0_24
RUNNING_USER、APP_HOME、APP_MAINCLASS、CLASSPATH根据自己项目的情况修改即可。
如果在windows下编辑上传到linux,注意用dos2unix命令转换文件格式,不然会报错。
写道
#!/bin/sh
#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,
#也可以作为启动java程序的独立脚本来使用。
#
#Author: tudaxia.com, Date: 2011/6/7
#
#警告!!!:该脚本stop部分使用系统kill命令来强制终止指定的java程序进程。
#在杀死进程前,未作任何条件检查。在某些情况下,如程序正在进行文件或数据库写操作,
#可能会造成数据丢失或数据不完整。如果必须要考虑到这类情况,则需要改写此脚本,
#增加在执行kill命令前的一系列检查。
#
#
###################################
#环境变量及程序执行参数
#需要根据实际环境以及Java程序名称来修改这些参数
###################################
#JDK所在路径
#JAVA_HOME=/root/JDK/jdk1.6.0_24
echo $JAVA_HOME

#执行程序启动所使用的系统用户,考虑到安全,推荐不使用root帐号
RUNNING_USER=root

#Java程序所在的目录(classes的上一级目录)
APP_HOME=/usr/local/NMAgent

#需要启动的Java主程序(main方法类)
APP_MAINCLASS=com.eastelsoft.netmanager.agent.Application

#拼凑完整的classpath参数,包括指定lib目录下所有的jar
CLASSPATH=$APP_HOME
for i in "$APP_HOME"/lib/*.*; do
CLASSPATH="$CLASSPATH":"$i"
done

#java虚拟机启动参数
JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m"

###################################
#(函数)判断程序是否已启动
#
#说明:
#使用JDK自带的JPS命令及grep命令组合,准确查找pid
#jps 加 l 参数,表示显示java的完整包路径
#使用awk,分割出pid ($1部分),及Java程序名称($2部分)
###################################
#初始化psid变量(全局)
psid=0

checkpid() {
javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS`

if [ -n "$javaps" ]; then
psid=`echo $javaps | awk '{print $1}'`
else
psid=0
fi
}

###################################
#(函数)启动程序
#
#说明:
#1. 首先调用checkpid函数,刷新$psid全局变量
#2. 如果程序已经启动($psid不等于0),则提示程序已启动
#3. 如果程序没有被启动,则执行启动命令行
#4. 启动命令执行后,再次调用checkpid函数
#5. 如果步骤4的结果能够确认程序的pid,则打印[OK],否则打印[Failed]
#注意:echo -n 表示打印字符后,不换行
#注意: "nohup 某命令 >/dev/null 2>&1 &" 的用法
###################################
start() {
checkpid

if [ $psid -ne 0 ]; then
echo "================================"
echo "warn: $APP_MAINCLASS already started! (pid=$psid)"
echo "================================"
else
echo -n "Starting $APP_MAINCLASS ..."
JAVA_CMD="nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAINCLASS >/dev/null 2>&1 &"
su - $RUNNING_USER -c "$JAVA_CMD"
checkpid
if [ $psid -ne 0 ]; then
echo "(pid=$psid) [OK]"
else
echo "[Failed]"
fi
fi
}

###################################
#(函数)停止程序
#
#说明:
#1. 首先调用checkpid函数,刷新$psid全局变量
#2. 如果程序已经启动($psid不等于0),则开始执行停止,否则,提示程序未运行
#3. 使用kill -9 pid命令进行强制杀死进程
#4. 执行kill命令行紧接其后,马上查看上一句命令的返回值: $?
#5. 如果步骤4的结果$?等于0,则打印[OK],否则打印[Failed]
#6. 为了防止java程序被启动多次,这里增加反复检查进程,反复杀死的处理(递归调用stop)。
#注意:echo -n 表示打印字符后,不换行
#注意: 在shell编程中,"$?" 表示上一句命令或者一个函数的返回值
###################################
stop() {
checkpid

if [ $psid -ne 0 ]; then
echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) "
su - $RUNNING_USER -c "kill -9 $psid"
if [ $? -eq 0 ]; then
echo "[OK]"
else
echo "[Failed]"
fi

checkpid
if [ $psid -ne 0 ]; then
stop
fi
else
echo "================================"
echo "warn: $APP_MAINCLASS is not running"
echo "================================"
fi
}

###################################
#(函数)检查程序运行状态
#
#说明:
#1. 首先调用checkpid函数,刷新$psid全局变量
#2. 如果程序已经启动($psid不等于0),则提示正在运行并表示出pid
#3. 否则,提示程序未运行
###################################
status() {
checkpid

if [ $psid -ne 0 ]; then
echo "$APP_MAINCLASS is running! (pid=$psid)"
else
echo "$APP_MAINCLASS is not running"
fi
}

###################################
#(函数)打印系统环境参数
###################################
info() {
echo "System Information:"
echo "****************************"
echo `head -n 1 /etc/issue`
echo `uname -a`
echo
echo "JAVA_HOME=$JAVA_HOME"
echo `$JAVA_HOME/bin/java -version`
echo
echo "APP_HOME=$APP_HOME"
echo "APP_MAINCLASS=$APP_MAINCLASS"
echo "****************************"
}

###################################
#读取脚本的第一个参数($1),进行判断
#参数取值范围:{start|stop|restart|status|info}
#如参数不在指定范围之内,则打印帮助信息
###################################
case "$1" in
'start')
start
;;
'stop')
stop
;;
'restart')
stop
start
;;
'status')
status
;;
'info')
info
;;
*)
echo "Usage: $0 {start|stop|restart|status|info}"
exit 1
esac
exit 0

 原文地址:http://www.tudaxia.com/archives/10

分享到:
评论
2 楼 skydazzle 2016-05-26  
这个java项目需要 导出成jar 吗?
1 楼 energykey 2011-12-13  
引用
java -Djava.ext.dirs=lib -Djava.library.path=lib cn.xiangqi.douban.Application $*


上面的这种方式可以省去拼接classPath导致的麻烦。

相关推荐

    springboot项目linux系统下 通用 启动脚本

    springboot项目linux系统下 通用 启动脚本 支持日志输出、远程调试开启 支持start、stop、restart命令 通用启动脚本,只需将服务名改成自己的服务名即可! 保证可用!

    linux通用版本jar启动脚本傻瓜式启动 run.sh

    linux通用版本jar启动脚本傻瓜式启动 sh run.sh start 启动 sh run.sh stop 停止 nohup java -jar XXX.jar & nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行

    sh脚本启动java -jar

    在Linux环境中,`sh`脚本是常用的自动化工具,用于执行一系列命令,特别是在启动Java应用程序时,如`java -jar`。这个标题和描述表明我们要讨论的是如何通过编写一个简单的Shell脚本来启动Java的JAR文件。这通常适用...

    Arm-linux 自定义开机启动程序,避开从桌面启动

    ### Arm-Linux自定义开机启动程序详解 #### 一、背景与目的 在Arm-Linux平台上进行嵌入式开发时,经常会遇到需要自定义开机启动程序的需求。例如,当开发者希望在启动时直接运行自己开发的Qt界面程序,而不是先...

    linux下启动Java程序和杀死java进程shell脚本

    linux下启动Java程序和杀死java进程shell脚本

    windows环境下启动java服务脚本

    windows环境下,启动java服务的bat脚本。注意修改: START "app" javaw -jar 服务jar包名.jar

    java在win下启动bat和在linux下启动shell脚本

    在Windows和Linux环境中,启动批处理脚本(bat)和shell脚本(sh)是常见的任务,特别是在自动化和脚本执行过程中。`RunScript.java`和`StreamGobbler.java`这两个文件可能就是用来实现这个功能的。 `RunScript....

    centos7开机自启动执行脚本

    在Linux系统中,CentOS 7是一个广泛应用的服务器操作系统,对于系统管理员来说,配置开机自启动脚本是一项基本任务,可以确保系统启动时自动运行特定的服务或程序。这里我们将详细探讨如何在CentOS 7中设置开机自...

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

    本篇文章将深入探讨如何使用`sh`脚本来启动Java的JAR程序,并将其设置为守护进程,以便在后台持续运行,即使用户注销或终端关闭也不会受到影响。 首先,我们需要创建一个shell脚本,例如`test.sh`,来执行我们的...

    java程序产品包模板-内置linux和Windows通用shell启动停止脚本(无需系统安装Java运行环境).zip

    该压缩包文件“java程序产品包模板-内置linux和Windows通用shell启动停止脚本(无需系统安装Java运行环境).zip”提供了一套适用于Java程序的通用打包方案,特别强调了其能够在Linux和Windows操作系统上无缝运行,且不...

    java linux启动jar包脚本

    脚本上有备注,将java项目打为jar包后,替换jar的包名为项目包名即可,log文件会自动生成,方便好用。

    shell,bat脚本运行java程序

    在Unix/Linux环境中,我们可以创建一个.sh文件作为shell脚本来执行Java程序。首先,确保系统已经安装了Java环境,可以通过`java -version`命令检查。然后,按照以下步骤编写脚本: 1. 使用文本编辑器(如vim、nano...

    基于Qt的开机自启动(二)(Linux)

    在Linux中,开机自启动通常涉及到`/etc/rc.d`或`/etc/init.d`目录下的脚本,或者在现代的Systemd系统中,是通过`/etc/systemd/system`目录下的服务单元文件(service unit file)来完成的。针对Qt应用程序,我们需要...

    SUSE Linux下开机自动运行脚本命令的方法

    ### SUSE Linux 下开机自动运行脚本命令的方法 #### 概述 在SUSE Linux(如openSUSE)中,为了实现系统启动时自动执行某些脚本或命令,需要了解和利用特定的启动脚本机制。本文将详细介绍openSUSE 11和10 SP2中的...

    java的windows启动脚本

    java的windows启动脚本

    windows下启动java jar包的bat脚本

    windows下启动java jar包的bat脚本 javaw后台启动,jdk1.8或者更高,winserver 2016 经过测试

    rocketmq设置开机启动脚本

    rocketmq设置开机启动脚本

    linux 通过脚本执行java程序

    总结一下,Linux环境下通过脚本执行Java程序涉及的知识点包括: 1. 安装与验证Java环境 2. 编写Bash脚本,包括设置主类、类路径、JVM参数等 3. 执行Java程序的命令行语法 4. 处理依赖的库和配置文件 5. 脚本的权限...

    Java项目linux启动脚本以及日志分割安装软件

    本资源主要涉及两个核心知识点:Java项目的Linux启动脚本和日志分割工具cronolog。 首先,让我们来深入理解Java项目的Linux启动脚本。在SpringBoot这样的微服务架构中,通常需要编写自定义的Shell脚本来实现服务的...

    Ubuntu22开机自启脚本 jar 包的自动化部署脚本

    Ubuntu22开机自启脚本 jar 包的自动化部署脚本 文件里面有使用方法说明,脚本亲测可用init.shcp kuosheng.service /etc/systemd/system/kuosheng.servicecp kuosheng.sh /usr/local/bin/kuosheng.shchmod 777 /usr/...

Global site tag (gtag.js) - Google Analytics