虽然写起动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目录下所有的jar

CLASSPATH=APPHOME/classesforiin"APP_HOME/classes

for i in "APPH​OME/classesforiin"APP_HOME"/lib/*.jar; do

CLASSPATH=“CLASSPATH":"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函数,刷新KaTeX parse error: Expected 'EOF', got '#' at position 10: 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: APPMAINCLASSalreadystarted!(pid=APP_MAINCLASS already started! (pid=APPM​AINCLASSalreadystarted!(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 - RUNNINGUSER−c"RUNNING_USER -c "RUNNINGU​SER−c"JAVA_CMD"

checkpid

if [ psid−ne0];thenecho"(pid=psid -ne 0 ]; then

echo "(pid=psid−ne0];thenecho"(pid=psid) [OK]"

else

echo “[Failed]”

fi

fi

}

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

#(函数)停止程序

#说明:

#1. 首先调用checkpid函数,刷新KaTeX parse error: Expected 'EOF', got '#' at position 10: psid全局变量

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

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

#4. 执行kill命令行紧接其后,马上查看上一句命令的返回值: KaTeX parse error: Expected 'EOF', got '#' at position 3: ?

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

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

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

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

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

stop() {

checkpid

if [ $psid -ne 0 ]; then

echo -n "Stopping APPMAINCLASS...(pid=APP_MAINCLASS ...(pid=APPM​AINCLASS...(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函数,刷新KaTeX parse error: Expected 'EOF', got '#' at position 10: psid全局变量

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

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

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

status() {

checkpid

if [ psid−ne0];thenecho"psid -ne 0 ]; then

echo "psid−ne0];thenecho"APP_MAINCLASS is running! (pid=psid)"elseecho"psid)"

else

echo "psid)"elseecho"APP_MAINCLASS is not running"

fi

}

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

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

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

info() {

echo “System Information:”

echo “"

echo head -n 1 /etc/issue

echo uname -a

echo

echo "JAVA_HOME=JAVAHOME"echo‘JAVA_HOME"

echo `JAVAH​OME"echo‘JAVA_HOME/bin/java -version`

echo

echo “APP_HOME=APPHOME"echo"APPMAINCLASS=APP_HOME"

echo "APP_MAINCLASS=APPH​OME"echo"APPM​AINCLASS=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

标签:psid,quot,pid,APP,JAR,echo,###################################,linux,运行

来源: https://blog.csdn.net/wsyijiale/article/details/90166850

linux双击运行jar包,linux下发布JAR包 并运行相关推荐

  1. java扫描包下类_实现获取扫描指定包路径下的jar文件或class文件JarPojoHandler类示例代码...

    通过JarPojoHandler类实现了扫描指定路径下如何获取所有的JAR包或class文件,可以对特定class对象文件筛选过滤等,具体代码如下所示import java.io.File;@b@im ...

  2. linux双击无法安装软件,LINUX下的软件为什么不能双击安装

    123789123 于 2009-11-07 13:54:42发表: ~~~~wubantu可以的 izualzhy 于 2009-11-06 14:26:51发表: 我的一双击就要找打开方式.. n ...

  3. 基于Linux的Qt项目在windows下发布

    QT在Linux下的界面处理人所共知,现在有个需求是一定要在windows下做界面,时间比较紧.目前已经在Linux下的界面如何port至windows呢? 这里用到QT的跨平台.这种时候使用qt+m ...

  4. linux下ib下抓包,HP-UX下的抓包工具nettl

    当我们搞不清unix/linux下的某个工具怎么用时最可靠也最有效的办法就是:看工具的联机手册,man nettl. 使用nettl抓包工具必须在root用户下执行.简单列个小的抓包例子: # cd ...

  5. linux怎么创建python文件_Linux下创建python脚本并运行(入门)

    1.首先定位到一个文件夹,然后使用vim编辑器:vim test.py 就创建了python脚本文件,并且进入编辑状态 2.编辑好之后按Esc切换到命令模式,然后输入:wq 回车就自动保存完成了,然后 ...

  6. linux 网络管理器未运行怎么解决,Ubuntu下提示网络管理器未运行解决方法

    刚折腾修改主机名(hostname),不小心把主机名去掉了,发现不能上网了,提示网络管理器未运行.最终发现就是因为缺少主机名导致的,又摸索了一下,发现缺少主机名有如下几个特征: 1.开机有一屏不是下划 ...

  7. Android下发布正式包注意事项

    1.是否将调试信息关闭了 2.AndroidManifest.xml文件 android:versionCode与android:versionName是否都递增了 android:debuggabl ...

  8. tcpdump抓两个网卡的包_Linux下网络抓包命令tcpdump详解(在wireshark中看包)

    tcpdump -i eth0 -c 2000 -w eth0.cap tcpdump采用命令行方式,它的命令格式为: tcpdump[ -adeflnNOpqStvx ] [ -c 数量 ] [ - ...

  9. python三个箭头怎么打出来_(Python3)Linux和Windows箭头键按下

    我一直在寻找一段时间,现在遍布互联网,但我似乎找不到一个独特的方式为Linux和Windows,允许捕捉箭头上下,等事件.(Python3)Linux和Windows箭头键按下 随着msvcrt包在W ...

最新文章

  1. 为什么UI线程中创建Handler可以不传Looper?
  2. 文巾解题383. 赎金信
  3. Mysql数据库(五)——mysql事务及引擎
  4. 『设计模式』反射,反射程序员的快乐!为什么我老是加班?为什么我工资不如他多?原来是我不懂反射!
  5. 7-10 求数字个数 (20 分)
  6. Microsoft经典平面广告we see
  7. BFC和haslayout(IE6-7)(待总结。。。)
  8. swagger map示例_Android Google Map Street View示例
  9. PIX 7.2 PAT
  10. mysql 求和_mysql分组求和
  11. 软件研发管理之版本管理
  12. 理解透彻!从单体式架构迁移到微服务架构
  13. SpringBoot基础-Environment解析
  14. 浙大新增机器人工程、人工智能专业:今年招生,导师阵容强大
  15. 模型量化论文阅读#2----BRECQ: PUSHING THE LIMIT OF POST-TRAINING QUANTIZATION BY BLOCK RECONSTRUCTION
  16. 动态爱心和3D旋转烟花代码
  17. RT-Thread学习笔记|TCS34725 RGB 颜色识别传感器详解
  18. 目标跟踪算法综述与分析
  19. 【东信北邮成都研发中心】一年Java开发经验面经
  20. IE11 error object doesn't support property or method 'fill'

热门文章

  1. NTP And System Clock Maintenance
  2. 刘强东怼天猫,是在陈述事实还是另有深意?
  3. php直播源码,图片亮度
  4. 8b10b编码源码 matlab,8b/10b编码技术系列(一):Serdes、CDR、K码
  5. 什么是交叉检验(K-fold cross-validation)
  6. Java 联网五子棋(socket)
  7. Word2vec原理+实战学习笔记(二)
  8. 有哪些适合新手的练手Java项目?
  9. 新浪cn邮箱设置收件和发件服务器信息,新浪cn邮箱如何设置
  10. linux文件目录管理