介绍
这篇文章主要讲解了Linux通用的java程序启动脚本,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
虽然写起动外壳的频率非常不高…但是每次要写都要对付一大堆的jar文件路径,新加的jar包也必须要修改起动壳。
在网上找到一个挺好的通用shell脚本。
只需要修改一些配置变量,就可以用来做起动脚本了。
并且除了能起动,还支持关闭,重启,查看是否正在运行的功能。
开始函数中,nohup部分其实也可以提出来放入一个配置变量中。这里没有修改直接贴上作者的原文
脚本代码如下:
# !/bin/sh #该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动服务脚本被调用, #也可以作为启动java程序的独立脚本来使用。 # #作者:日期:2011/6/7 tudaxia.com # #警告! ! !:该脚本停止部分使用系统杀命令来强制终止指定的java程序进程。 #在杀死进程前,未作任何条件检查。在某些情况下,如程序正在进行文件或数据库写操作, #可能会造成数据丢失或数据不完整。如果必须要考虑到这类情况,则需要改写此脚本, #增加在执行杀命令前的一系列检查。 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #环境变量及程序执行参数 #需要根据实际环境以及Java程序名称来修改这些参数 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # JDK所在路径 JAVA_HOME=?usr/java/jdk" #执行程序启动所使用的系统用户,考虑到安全,推荐不使用根帐号 RUNNING_USER=根 # Java程序所在的目录(类的上一级目录) APP_HOME=/opt/tudaxia web - inf/测试/#需要启动的Java主程序(主方法类) APP_MAINCLASS=com.tudaxia.test.TestMain #拼凑完整的类路径参数,包括指定自由目录下所有的jar CLASSPATH=$ APP_HOME/类 我在“APP_HOME"美元/lib/* . jar;做 CLASSPATH=癈LASSPATH"美元;:“我美元; 完成 # java虚拟机启动参数 JAVA_OPTS=?ms512m -mx512m -Xmn256m -Djava.awt。无头=true - xx: MaxPermSize=128 m" # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #(函数)判断程序是否已启动 # #说明: #使用JDK自带的JPS命令及grep命令组合,准确查找pid # jps加l参数,表示显示java的完整包路径 #使用awk,分割出pid($ 1部分),及Java程序名称($ 2部分) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #初始化psid变量(全局) psid=0 checkpid () { javap=' $ JAVA_HOME/bin/jps - l | grep APP_MAINCLASS美元” 如果(- n“javaps"美元;];然后 psid=' echo $ javap | awk & # 39;{打印1美元}& # 39;” 其他的 psid=0 fi } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #(函数)启动程序 # #说明: # 1。首先调用checkpid函数,刷美元新psid全局变量 # 2。如果程序已经启动($ psid不等于0),则提示程序已启动 # 3。如果程序没有被启动,则执行启动命令行 # 4。启动命令执行后,再次调用checkpid函数 # 5。如果步骤4的结果能够确认程序的pid,则打印好,否则打印(失败) #注意:echo - n表示打印字符后,不换行 #注意:“nohup某命令在/dev/null 2祝辞,1,“的用法 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # start () { checkpid 如果(psid - ne 0美元);然后 回声“================================? 回声“警告:$ APP_MAINCLASS已经开始!(pid=$ psid)“; 回声“================================? 其他的 echo - n“开始APP_MAINCLASS美元……“ JAVA_CMD=皀ohup JAVA_OPTS美元$ JAVA_HOME/bin/java类路径类路径APP_MAINCLASS美元在/dev/null 2祝辞,1,“ 苏- RUNNING_USER美元- c“JAVA_CMD"美元; checkpid 如果(psid - ne 0美元);然后 回声“(pid=$ psid)[好]“; 其他的 回声”(失败), fi fi } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #(函数)停止程序 # #说明: # 1。首先调用checkpid函数,刷美元新psid全局变量 # 2。如果程序已经启动($ psid不等于0),则开始执行停止,否则,提示程序未运行 # 3。使用kill - 9 pid命令进行强制杀死进程 # 4。执行杀命令行紧接其后,马上查看上一句命令的返回值:美元,# 63; # 5。如果步骤4的结果,美元# 63;等于0,则打印好,否则打印(失败) # 6。为了防止java程序被启动多次,这里增加反复检查进程,反复杀死的处理(递归调用停止)。 #注意:echo - n表示打印字符后,不换行 #注意:在壳牌编程中,“美元,# 63;“表示上一句命令或者一个函数的返回值 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # stop () { checkpid 如果(psid - ne 0美元);然后 echo - n“停止美元APP_MAINCLASS…(pid=$ psid)“; 苏- RUNNING_USER美元- c“kill - 9 psid"美元; 如果(美元),# 63;情商0);然后 回声“[好]“; 其他的 回声”(失败), fi checkpid 如果(psid - ne 0美元);然后 停止 fi 其他的 回声“================================? 回声“警告:$ APP_MAINCLASS不是running" 回声“================================? fi } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #(函数)检查程序运行状态 # #说明: # 1。首先调用checkpid函数,刷美元新psid全局变量 # 2。如果程序已经启动($ psid不等于0),则提示正在运行并表示出pid # 3。否,则提示程序未运行 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 状态(){ checkpid 如果(psid - ne 0美元);然后 回声“美元APP_MAINCLASS运行!(pid=$ psid)“; 其他的 回声“美元APP_MAINCLASS不是running" fi } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #(函数)打印系统环境参数 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # info () { 回声“系统信息:“; 回声“* * * * * * * * * * * * * * * * * * * * * * * * * * * *”; 回声“头- n 1/etc/issue” 回声的uname—” 回声 回声“JAVA_HOME=$ JAVA_HOME" echo $ JAVA_HOME/bin/java - version” 回声 回声“APP_HOME=$ APP_HOME" 回声“APP_MAINCLASS=$ APP_MAINCLASS" 回声“* * * * * * * * * * * * * * * * * * * * * * * * * * * *”; } # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #读取脚本的第一个参数(1美元),进行判断 #参数取值范围:{开始|停止|重启| |状态信息} #如参数不在指定范围之内,则打印帮助信息 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 例“1美元,在 & # 39;开始# 39;) 开始 ;; & # 39;停止# 39;) 停止 ;; & # 39;启动# 39;) 停止 开始 ;; & # 39;状态# 39;) 状态 ;; & # 39;信息# 39;) 信息 ;; *) 回声“用法:$ 0{开始|停止|重启| |状态信息}“; 出口1 esac;Linux通用的java程序启动脚本