`
energykey
  • 浏览: 597460 次
  • 性别: 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导致的麻烦。

相关推荐

    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文件。这通常适用...

    Linux通用java程序启动脚本代码实例

    【Linux通用Java程序启动脚本】是用于在Linux操作系统中便捷地启动、停止、重启以及检查Java应用程序状态的脚本。这种脚本通常采用bash语言编写,能够灵活适应不同的Java项目,只需调整其中的配置变量即可。以下是...

    linux 一键启动 jar包 批处理脚本

    linux 一键启动 jar包 批处理脚本,适用于java 项目,spring boot 一键启动,停止,重启 等,代码简洁,可直接使用.

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

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

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

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

    centos7开机自启动执行脚本

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

    linux下执行java程序的sh脚本下载

    ### Linux下执行Java程序的Shell脚本详解 #### 背景介绍 在Linux环境中运行Java应用程序时,经常需要通过shell脚本来启动Java程序。这种方式不仅便于自动化部署和管理,还可以根据需求灵活调整运行参数。本文将详细...

    windows环境下启动java服务脚本

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

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

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

    java linux启动jar包脚本

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

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

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

    java程序启动脚本.sh

    jar包后台启动脚本编写方式,使用java -jar ***.jar,方式运行jar包,只需要更新jar包名称和运行目录、日志目录就行

    linux下脚本编译java,定时删除日志

    另一个脚本`mmDataCollect.sh`可能负责数据收集和处理,它可能包含与Java程序交互的逻辑,例如启动Java应用,或者使用`java`命令执行已经编译好的类文件。 对于`tomcat_cut_2.sh`,虽然没有具体描述,但根据名字...

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

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

    shell脚本启动Java程序测试工程

    当涉及到启动Java应用程序时,shell脚本可以提供一个方便、可重复且灵活的方法。下面我们将深入探讨如何使用shell脚本来启动Java程序以及相关的知识点。 首先,我们需要了解Java程序的运行方式。Java应用程序通常由...

    java的windows启动脚本

    java的windows启动脚本

    windows下启动java jar包的bat脚本

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

    centos7下启动springboot项目启动脚本(shell脚本)

    前言:打包好的springboot项目,可以使用java -jar xxx.jar的方式启动。当出现多个springboot项目需要启动的时候,可以使用脚本启动的方式。这在springcloud项目的开发测试阶段尤为有用。以下展示启动脚本示例,过程...

Global site tag (gtag.js) - Google Analytics