Linux下启动java程序的通用脚本

简介: Linux下启动java程序的通用脚本

#!/bin/sh

#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,

#也可以作为启动java程序的独立脚本来使用。


#警告!!!:该脚本stop部分使用系统kill命令来强制终止指定的java程序进程。


#在杀死进程前,未作任何条件检查。在某些情况下,如程序正在进行文件或数据库写操作,

#可能会造成数据丢失或数据不完整。如果必须要考虑到这类情况,则需要改写此脚本,

#增加在执行kill命令前的一系列检查。


###################################


#环境变量及程序执行参数

#需要根据实际环境以及Java程序名称来修改这些参数


###################################


#JDK所在路径

#JAVA_HOME=/usr/local/somnus/jdk1.7.0_80


#脚本所在的目录

APP_HOME=$(cd "$(dirname "$0")"; pwd)


#class名称,编译时替换

APP_CLASS=com.somnus.xk.core.CommonDBStart


#jar名称,编译时替换

APP_JAR_NAME=COMMON_DB-0.0.1-SNAPSHOT.jar


#CLASS_PATH=$APP_HOME/../conf

JAR_LIB=$APP_HOME/../lib

JAR_LOG=$APP_HOME/../log


#java虚拟机启动参数

JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m"

JAVA_OPTS_JMX="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

#调试参数

debug_port=$2

DEBUG_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=$debug_port,server=y,suspend=n"


###################################


#(函数)判断程序是否已启动

#说明:

#使用JDK自带的JPS命令及grep命令组合,准确查找pid

#jps 加 l 参数,表示显示java的完整包路径

#使用awk,分割出pid ($1部分),及Java程序名称($2部分)


###################################


#初始化psid变量(全局)

psid=0

checkpid() {

javaps=`ps ax|grep java|grep $APP_JAR_NAME |grep -v grep`

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() {

echo "****************************"

checkpid

if [ $psid -ne 0 ]; then

echo "================================"

echo "程序: $APP_CLASS 已经启动! (进程号=$psid)"

echo "================================"

else

echo "启动 $APP_CLASS ..."

nohup java $JAVA_OPTS -jar $JAR_LIB/$APP_JAR_NAME >> nohup.out 2>&1 &

checkpid

if [ $psid -ne 0 ]; then

echo "程序: $APP_CLASS 启动成功! (进程号=$psid) [OK]"

else

echo "程序: $APP_CLASS 启动失败! [Failed]"

fi

fi

echo "****************************"

}


###################################


#(函数)停止程序

#

#说明:

#1. 首先调用checkpid函数,刷新$psid全局变量

#2. 如果程序已经启动($psid不等于0),则开始执行停止,否则,提示程序未运行

#3. 使用kill -2 pid命令进行强制杀死进程

#4. 执行kill命令行紧接其后,马上查看上一句命令的返回值: $?

#5. 如果步骤4的结果$?等于0,则打印[OK],否则打印[Failed]

#6. 为了防止java程序被启动多次,这里增加反复检查进程,反复杀死的处理(递归调用stop)。

#注意:echo -n 表示打印字符后,不换行

#注意: 在shell编程中,"$?" 表示上一句命令或者一个函数的返回值


###################################


stop() {

echo "****************************"

checkpid

if [ $psid -ne 0 ]; then

echo "正在停止 $APP_CLASS ...(pid=$psid)"

kill -2 $psid

if [ $? -eq 0 ]; then

echo "停止 $APP_CLASS 成功!(pid=$psid) [OK]"

else

echo "正在停止 $APP_CLASS 失败!(pid=$psid) [Failed]"

fi


sleep 2

checkpid

if [ $psid -ne 0 ]; then

kill -9 $psid

fi

else

echo "warn: $APP_CLASS 没有运行..."

fi

echo "****************************"

}


###################################


#(函数)检查程序运行状态

#

#说明:

#1. 首先调用checkpid函数,刷新$psid全局变量

#2. 如果程序已经启动($psid不等于0),则提示正在运行并表示出pid

#3. 否则,提示程序未运行


###################################


status() {

echo "****************************"

checkpid

if [ $psid -ne 0 ]; then

echo "$APP_CLASS 正在运行! (进程号=$psid)"

else

echo "$APP_CLASS 没有运行"

fi

echo "****************************"

}


###################################


#(函数)打印系统环境参数


###################################


info() {

echo "System Information:"

echo "****************************"

echo `head -n 1 /somnus/issue`

echo `uname -a`

echo

echo "JAVA_HOME=$JAVA_HOME"

echo `java -version`

echo

echo "APP_HOME=$APP_HOME"

echo "APP_JAR=$APP_CLASS"

echo "****************************"

}


###################################


#(函数)打印log


###################################


log() {

tailf -500 $JAR_LOG/console.log

}


###################################


#读取脚本的第一个参数($1),进行判断

#参数取值范围:{start|debug|stop|restart|status|info|log}

#如参数不在指定范围之内,则打印帮助信息


###################################


case "$1" in

'start')

start

;;

'debug')

debug

;;

'stop')

stop

;;

'restart')

stop

start

;;

'status')

status

;;

'info')

info

;;

'log')

log

;;

'startjmx')

startjmx

;;

*)


echo "=======参数错误========="

echo "exp :$0 start {start|debug|stop|restart|status|info|log}"

exit 1

esac

exit 0

相关文章
|
20天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
2月前
|
SQL 安全 Java
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
53 1
|
2月前
|
分布式计算 Java Hadoop
linux中HADOOP_HOME和JAVA_HOME删除后依然指向旧目录
通过以上步骤,可以有效地解决 `HADOOP_HOME`和 `JAVA_HOME`删除后依然指向旧目录的问题。确保在所有相关的配置文件中正确设置和删除环境变量,并刷新当前会话,使更改生效。通过这些措施,能够确保系统环境变量的正确性和一致性。
34 1
|
2月前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
95 1
|
2月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
2月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
3月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
505 2
|
3月前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
183 1
|
3月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
98 1
|
9天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
49 17