shell通用脚本启动

Linux下shell通用脚本启动jar(微服务)

vim app_jar.sh

#!/bin/bash

#source /etc/profile
# Auth:Liucx
# Please change these parameters according to your real env.
# set Java Home: Remember that dolphin only supports JDK8!
JAVA_HOME=/usr/java/jdk1.8.0_162

# application directory
cd `dirname $0`
APP_HOME=`pwd`

APP_NAME="`cd ${APP_HOME} && find -name ‘*.jar‘ `"
JAR_HOME=`pwd |awk -F"/" ‘{print $NF}‘`
# Java JVM lunch parameters
if [ x"$JAVA_MEM_OPTS" == x ];then
    JAVA_MEM_OPTS="-server -Xms512m -Xmx512m -Xmn128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
fi

# waiting timeout for starting, in seconds
START_WAIT_TIMEOUT=30

psid=0

checkpid() {
   javaps=`$JAVA_HOME/bin/jps -l | grep "$JAR_HOME"`
   if [ -n "$javaps" ]; then
      psid=`echo $javaps | awk ‘{print $1}‘`
   else
      psid=0
   fi
}

start() {
   checkpid

   if [ $psid -ne 0 ]; then
      echo "================================"
      echo "warn: $APP_NAME already started! (pid=$psid)"
      echo "================================"
   else
      echo -n "Starting $APP_NAME ..."
      #-Dspring.profiles.active=dev 指定环境
      nohup $JAVA_HOME/bin/java -jar -Dspring.profiles.active=dev -DCONFIG_ENABLE=true $JAVA_MEM_OPTS  ${APP_NAME} >${JAR_HOME}.log 2>&1 &
      checkpid
      if [ $psid -ne 0 ]; then
         echo "(pid=$psid) [OK]"
      else
         echo "[Failed]"
      fi
   fi
}

stop() {

   sleep 2
   checkpid

   if [ $psid -ne 0 ]; then
      echo -n "Stopping $APP_NAME ...(pid=$psid) "
      #kill -9 $psid
      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_NAME is not running"
      echo "================================"
   fi
}

status() {
   checkpid

   if [ $psid -ne 0 ];  then
      echo "$APP_NAME is running! (pid=$psid)"
   else
      echo "$APP_NAME 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_NAME=$APP_NAME"
   echo "****************************"
}

case "$1" in
   ‘start‘)
      start
      ;;
   ‘stop‘)
     stop
     ;;
   ‘restart‘)
     stop
     echo "You restart the application ..."
     start #
     ;;
   ‘status‘)
     status
     ;;
   ‘info‘)
     info
     ;;
  *)
     echo "Usage: $0 {start|stop|restart|status|info}"
     exit 1
esac

使用方式:

app_jar.sh  start

app_jar.sh  stop

app_jar.sh  restart

注:该脚本只需要放在jar包当前目录下即可,脚本当前目录只允许存在一个jar包,如果多个会同时启动或重启

还需提醒下:启动的jar包名主体不能改变,防止脚本无效。目前正在公司生产环境使用中,希望您纠正,提出建议。

本文采用的jar包是通过idea下maven打包的springboot项目。

写这个shell脚本是为了在linux下方便启动jar包时不用输入太多的shell命令,将启动脚本的一系列shell命令整理到一个xxx.sh中,每次启动此.sh文件就可以

 

linux下直接创建xxx.sh文件

vim start_syslogin.sh

#!/bin/bash

#jar包文件路径及名称(目录按照各自配置)
APP_NAME=/opt/app/syslogin/syslogin.jar

#日志文件路径及名称(目录按照各自配置)
LOG_FILE=/opt/app/logs/syslogin.log

#查询进程,并杀掉当前jar/java程序

pid=`ps -ef|grep $APP_NAME | grep -v grep | awk ‘{print $2}‘`
kill -9 $pid
echo "$pid进程终止成功"

sleep 2

#判断jar包文件是否存在,如果存在启动jar包,并时时查看启动日志

if test -e $APP_NAME
then
echo ‘文件存在,开始启动此程序...‘

# 启动jar包,指向日志文件,2>&1 & 表示打开或指向同一个日志文件
nohup java -jar $APP_NAME > $LOG_FILE 2>&1 &

#实时查看启动日志(此处正在想办法启动成功后退出)
tail -f $LOG_FILE

#输出启动成功(上面的查看日志没有退出,所以执行不了,可以去掉)

#echo ‘$APP_NAME 启动成功...‘
else
echo ‘$APP_NAME 文件不存在,请检查。‘
fi

最终于形成 start_syslogin.sh

登录linux后执行 ./start_syslogin.sh

原文地址:https://www.cnblogs.com/hntpy/p/11765499.html

时间: 2024-08-05 01:43:25

shell通用脚本启动的相关文章

python定时器用法 + 获取脚本所在绝对路径 + 定义日志格式 + shell将脚本直接启动到后

python定时器用法 + 获取脚本所在绝对路径 + 定义日志格式 的测试代码 如果用python写好一个有定时器的脚本后,如果脚本里还读了配置文件,那么配置文件路径如果写死的话,有一天要换了存放目录的话,需要修改脚本的配置文件路径,而且每次都要到脚本所在路径用 nohup 启动到后台很麻烦.用 os.path.split(os.path.realpath(sys.argv[0]))[0] 来获取文件所在的绝对路径,配置文件同样扔到和它同级,这样就可以在任意地方启动,一劳永逸~~~ 此用法站在运

shell脚本启动语法错误syntax error near unexpected token '{

执行shell脚本时失败,报语法错误,但脚本内容检查正常 原因为该脚本是在非Linux系统下编辑之后放到系统执行的,文件模式类型非Linux系统匹配的模式类型. 查看文件的模式类型 显示文件的模式类型为 dos 修改文件的模式类型为Linux匹配的 unix 保存之后即可正常启动脚本. shell脚本启动语法错误syntax error near unexpected token '{ 原文地址:https://www.cnblogs.com/zjfjava/p/10708370.html

Shell脚本启动程序

Linux 下后台脚本启动Jar程序 Nohup后台输出运行日志 cd /home/zeze/jar/WeiboPost java -jar WeiboAutoPost.jar ../configuration.properties >> ./nohup.out 2>&1 & echo WeiboPost succeed cd ../WeiboCrawl java -jar WeiboCommentCrawl.jar ../configuration.properties

Appium+Python app自动化测试之脚本启动和停止Appium服务

研究了一段时间的Appium android app的自动化测试,工作中需要连接多台手机终端同时执行测试用例,我实现的方式是获取用例中需要执行用例的设备id个数以及实际连接到的设备数(通过adb devices获取),然后启动相应数量的Appium 服务,以便每个设备执行时并发进行并且互不影响.当然也可以通过selenium grid来实现,只是目前还在学习研究中,还是先把目前启动多个appium服务实现的方式记录下来. 一.Windows下启动单个appium服务 需要启动多个appium服务

怎么在命令模式下使用adb / 进入adb shell(脚本)

1.打开winows菜单,输入cmd命令,点击确定,进入命令模式下. 2.输入命令 D:(这里输入的D表示你的sdk存放的盘下) 然后回车输入cd 3.然后选择你sdk路径,复制路径. 4.鼠标点击cmd,选择编辑,选择粘贴 将复制的路径粘贴到 命令行 回车. 5.然后输入命令adb start-service 打开adb. 出现如图所示,表示adb服务开启成功,就可以使用adb命令了. 6.使用adb  shell 命令.--- 进入adb shell(脚本) 原文:http://jingya

【Telnet】使用Telnet协议连接到远程Shell执行脚本

介绍 本文介绍如何通过Telnet协议连接到远程Shell,执行脚本,并获取执行结果: 相关文章: <[Jsch]使用SSH协议连接到远程Shell执行脚本>http://www.cnblogs.com/ssslinppp/p/6244653.html 其他示例: http://commons.apache.org/proper/commons-net/examples/telnet/TelnetClientExample.java http://www.programcreek.com/ja

Linux shell 自启动脚本写法

# ********************************************************************** # Linux shell 自启动脚本写法 # 说明: # 我们在做系统的时候,写自启动脚本是常有的事,下面是一个样板分析. # # 2017-1-10 深圳 南山平山村 曾剑锋 # ********************************************************************** #!/bin/sh # 脚本

mysql5.5 免编译安装及脚本启动报错深入

Mysql安装环境简介: 最近在做MHA.已经安装完毕heartbeat和drbd,现在准备安装Mysql. Mysql安装目录:/opt/mysql Mysql数据目录:/data/mysql 备注:/data目录实际是drbd需要同步到备节点的磁盘分区 [[email protected] src]# df -h Filesystem     Size  Used Avail Use% Mounted on /dev/sda2      9.5G  2.0G  7.1G 22% / tmpf

利用脚本启动java程序

今天在工作中,需要写一个shell脚本,启动一个socket程序,从而模拟短信网关.查了一些资料,终于搞定了,现在记录一下,方便大家查阅. 为了说明使用方法,我们就用最简单的程序来实现,比如我们要运行下面这个类的main方法 package chb.cmd.test;import java.io.File;import java.io.IOException;import org.apache.log4j.Logger;public class TestClass {        static