Linux通用的java程序启动脚本
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,这篇文章主要讲解了Linux通用的java程序启动脚本,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。虽然写起动shell的频率非常不高。。。但是每次要写都要对付一大堆的j
千家信息网最后更新 2025年12月04日Linux通用的java程序启动脚本
这篇文章主要讲解了Linux通用的java程序启动脚本,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
虽然写起动shell的频率非常不高。。。但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell。
在网上找到一个挺好的通用shell脚本。
只需要修改一些配置变量,就可以用来做起动脚本了。
并且除了能起动、还支持关闭、重启、查看是否正在运行的功能。
start函数中,nohup部分其实也可以提出来放入一个配置变量中。这里没有修改直接贴上作者的原文
脚本代码如下:
#!/bin/sh#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7##警告!!!:该脚本stop部分使用系统kill命令来强制终止指定的java程序进程。#在杀死进程前,未作任何条件检查。在某些情况下,如程序正在进行文件或数据库写操作,#可能会造成数据丢失或数据不完整。如果必须要考虑到这类情况,则需要改写此脚本,#增加在执行kill命令前的一系列检查。######################################环境变量及程序执行参数#需要根据实际环境以及Java程序名称来修改这些参数####################################JDK所在路径JAVA_HOME="/usr/java/jdk" #执行程序启动所使用的系统用户,考虑到安全,推荐不使用root帐号RUNNING_USER=root #Java程序所在的目录(classes的上一级目录)APP_HOME=/opt/tudaxia/test/WEB-INF #需要启动的Java主程序(main方法类)APP_MAINCLASS=com.tudaxia.test.TestMain #拼凑完整的classpath参数,包括指定lib目录下所有的jarCLASSPATH=$APP_HOME/classesfor i in "$APP_HOME"/lib/*.jar; 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 1esac;看完上述内容,是不是对Linux通用的java程序启动脚本有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。
程序
脚本
函数
命令
参数
变量
运行
全局
进程
部分
提示
检查
内容
数据
正在
环境
目录
系统
路径
起动
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
vs 数据库生成实体类
简述数据库管理系统的定义及功能
余姚智能刀片服务器不二之选
服务器 连续运行时间
前置usb手机管理服务器
排列组合软件开发
服务器分c盘与d盘吗
软件开发是制造业还是服务业
河北超融合服务器公司
电子商务网络安全问题及对策
新概念数据库视频
制样机软件开发
vb至少一个参数为数据库
中小学网络安全教育现状
要怎么学习网络技术
云服务器上线后安全模式
双轨会员系统软件开发
威胁国家网络安全案例
数据库倒序的关键字
宜兴微型软件开发服务电话
金山区企业网络技术服务诚信互利
基于区块链的数据库应用
关于弱电智能化网络技术知识
微信合元软件开发怎么删除
如果用excel建数据库
数据库查询字段值
锐捷网络技术支持薪资待遇
数据库怎么删除列
数据库无法获取参数
数据库标签正好容纳