一个简单的SHELL脚本模板

原创 2016年08月29日 10:11:01

一个简单的SHELL脚本模板,适用于Java项目的启动,停止,重启。

如果在windows上编辑,请使用Notepad++ 设置编码格式为UTF-8无BOM编码,脚本的文档格式为UNIX格式,否则会因为一些看不到的字符导致脚本无法使用。

#!/bin/bash

# Comments to support chkconfig on Linux
# chkconfig: 2345 64 36

# Author : deng.gonghai
# Date   : 2016-08-29

# ======================================
# Script for the xxx Server
# ======================================

# 服务名,该参数配合 ps -ef 命令用来查找服务信息.
# 设置此值的目的是查找服务进程ID时方便.一般来说此值具有一定的标识意义.
SERVER_NAME="MyTest"

# JDK安装目录,使用默认的JDK,推荐修改为JDK路径.
JAVA_HOME=$JAVA_HOME

# 使用的库文件目录,所有的外部jar包请放到这个目录下.
INFLIB=""

# 一般情况下该值为项目二进制文件的根目录.如果项目打成了jar包,则该值指定为jar包即可.
CLASS_PATH=test1.jar

# 虚拟机参数,设置虚拟机内存等一些配置.
#VM_ARGUMENTS="-Xms128m -Xmx256m -XX:MaxPermSize=64m \
#              -Djava.awt.headless=true \
#              -XX:+HeapDumpOnOutOfMemoryError \
#              -XX:+HeapDumpOnCtrlBreak \
#              -XX:HeapDumpPath=/app/logs\
#              -Xverbosegc:file=/app/logs/gc.log \
#              -Dfile.encoding=GBK \
#              -Duser.language=zh \
#              -Duser.region=CN \
#              -Dlog4j.configuration=file:./classes/log4j_cfg/log4j_MGR.properties "

# 服务启动的主类.
MainClass=com.ztesoft.mputils.StartTest

# main方法的参数在这里设置.参数与参数之间请用空格隔开.
# 字符串中间有空格,所以需要使用双引号.
PROGRAM_ARGUMENTS="args1 args2 args3"

# 自定义控制台输出路径,默认情况下为nohup.out
CONSOLE_LOG="nohup.out"

# 启动服务(判断服务是否启动,只有没有启动的情况下,才启动.)
function start(){

  # 正在运行的服务数量
  runNum=`ps -ef|tr -s ' '|sort -n |grep $SERVER_NAME |grep -v "grep" | awk '{print $2}' |wc -l`

  # 当前运行的服务数为 0 ,启动服务.
  if [ $runNum -eq 0 ] ; then
    # 启动命令
    command="$JAVA_HOME/bin/java -D$SERVER_NAME \
             -cp $CLASS_PATH -Djava.ext.dirs=$INFLIB \
             $VM_ARGUMENTS $MainClass $PROGRAM_ARGUMENTS"

    # 将服务挂到后台启动,并将控制台日志重定向到 CONSOLE_LOG.
    nohup $command > $CONSOLE_LOG 2>&1 &

    # 打开控制台日志.
    if [ $? -eq 0 ] ; then
      echo "服务 $SERVER_NAME 启动成功!! 服务进程PID=$! . 正在打开控制台日志..."
      tail -f $CONSOLE_LOG
    else
      echo "服务启动失败,1秒钟后将打开控制台日志."
      sleep 1
      tail -f $CONSOLE_LOG
    fi

  # 当前可能存在正在运行的服务,或者脚本判断服务数量有错误.
  else
    echo "服务已经启动,启动服务个数为 ${runNum} 个, 请先停止服务 $SERVER_NAME."
  fi

}


# 停止服务
function stop(){
  # 正在运行的服务数量
  runNum=`ps -ef|tr -s ' '|sort -n |grep $SERVER_NAME |grep -v "grep" | awk '{print $2}' |wc -l`

  # 如果正在运行的服务数量为1, 则停止服务
  if [ $runNum -eq 1 ] ; then
    PID=`ps -ef|tr -s ' '|sort -n |grep $SERVER_NAME |grep -v "grep" | awk '{print $2}'`
    if [ $PID -gt 1 ] ; then
      echo "服务 $SERVER_NAME 的PID为 $PID. 2秒钟之后将停止该服务."
      sleep 2
      kill $PID
      sleep 3
      if [ $? -eq 0 ] ; then
        echo "停止服务 $SERVER_NAME 成功!!"
        return 0
      else
        echo "停止服务发生异常,请手工停止并检查原因."
      fi
    else
      echo "获取PID失败,获取PID为 $PID .请手工停止服务 $SERVER_NAME ."
    fi

  # 停止服务数量不对,需要人工干预
  else
    if [ $runNum -eq 0 ] ; then
      echo "当前正在运行服务数量 $runNum 个.无正在运行的服务."
      return 0
    else
      echo "当前正在运行服务数量 $runNum 个,请手动选择停止!!"
    fi
  fi

  return 1
}
# 重启
function restart(){
   stop
   if [ $? -eq 0 ] ; then
     echo "正在启动服务..."
     sleep 5
     start
   else
     echo "停止服务失败,请检查原因!!"
   fi
}
# 其他情况
function others(){
  echo " Usage: start|stop|restart "
}

case "$1" in
  start)
    start
  ;;
  stop)
    stop
  ;;
  restart)
    restart
  ;;
  *)
    others
  ;;
esac


版权声明:本文为博主原创文章,未经博主允许不得转载。

shell脚本处理长参数的模板

shell脚本处理长参数的模板一个shell模板,处理命令行参数,支持长短参数:#!/bin/bash # # FILE: kvm-clone-v2.sh # # DESCRIPTION: Clone...

Shell脚本(自动填充函数模板)

最近很多同学在看我视频教程的时候,对 vii 这货很好奇,vii 是 vi 的亲戚吗?为什么用它新创建一个新程序能自动填充程序框架代码呢? 今天就来扒一扒这货。 其实,vii 是我写的一...

Shell脚本编程-脚本格式

Shell脚本文件是一个文本文件,在Linux中,文件后缀名不作为系统识别文件类型的依据,但是可以作为我们识别文件的依据,可以简单的将脚本文件以.sh结尾。Shell脚本就是一些程序,命令的集合,sh...

MySQL使用SELECT INTO OUTFILE导出文本文件

MySQL使用SELECT...INTO OUTFILE导出文本文件 MySQL中,可以使用SELECT...INTO OUTFILE语句将表的内容导出为一个文本文件。其基本的语法格式如下: ...

Scala---文件读取、写入、控制台操作

Scala文件读取E盘根目录下scalaIO.txt文件内容如下: //文件读取 val file=Source.fromFile("E:\\scalaIO.txt") for(l...

一个备份MySQL数据库的简单Shell脚本

Shell脚本是我们写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行。我们也可以逐一敲入命令手动执行。如果我们要使用shell脚本就必须在一开始把这些命令写到一个文本文件中,以后就可以随意反...

一个备份MySQL数据库的简单Shell脚本

Shell脚本是我们写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行。我们也可以逐一敲入命令手动执行。如果我们要使用shell脚本就必须在一开始把这些命令写到一个文本文件中,以后就可以随意反...

一个简单的加密解密方法(java、shell脚本)

最近项目中有个小的需求,配置文件中配置有DB密码,客户担心xml文件被非法窃取,所以要求配置文件中的密码是经过加密的。这就有个问题,常用的MD5加密,理论上是不可逆的。所以简单写了一个加密解密方法。 ...

Linux 编写一个简单的Shell脚本

如果我们想让shell 来完成更多的工作,通过把我们的工具一起放置到我们自己设计的程序中,然后shell 就会自己来执行这些复杂的任务序列。通过编写shell 脚本,我们让shell 来做这些事情。 ...

Linux下实现一个简单进度条和shell脚本实现彩色进度条

我们先来看看进度条的实现代码 有读者可能会疑惑,\r和\n有区别吗? 答案是肯定的,“回车”“换行”实际上是两个动作,‘\n’表示换行,’\r’表示回车。再来看看为什么要用usleep? w...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个简单的SHELL脚本模板
举报原因:
原因补充:

(最多只允许输入30个字)