linux自作java -jar xxx服务开机自启动脚本

 1、java应用服务

[root@edge-01 services]# tree service-manage/
├── bin
│   ├── deamon.sh                       #启动脚本
│   └── service.pid                     #pid
├── conf                                #配置文件路径
│   ├── bootstrap.yml                
│   ├── logback-spring.xml
│   └── mapper
│       └── taos
│           └── HistoryDataMapper.xml
├── lib                                #jar所在路径
│   └── service-manage-biz-0.0.1.jar
└── logs                               #日志路径
    ├── gc.log
    └── service-manage-biz
        ├── 2022-12
        │   └── error.2022-12-29.0.log.gz 

 2、自作启动脚本

创建启动脚本

vi deamon.sh

内容如下

#!/usr/bin/env bash


#  $0:当前Shell程序的文件名
#  dirname $0,获取当前Shell程序的路径
#  cd `dirname $0`,进入当前Shell程序的目录
#  $(cd "$(dirname "$0")"; pwd)  返回当前文件所在的路径
baseDir=$(cd "$(dirname "$0")"; pwd)
#引用该路径
ROOT_DIR="${baseDir}/.."

export JAVA_HOME=$JAVA_HOME
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export LOG_HOME="${ROOT_DIR}/logs"

PIDFILE="${ROOT_DIR}/bin/service.pid"
#app name
APP_NAME=`ls ${ROOT_DIR}/lib/service-manage-biz-*.jar`
APP_CONF="${ROOT_DIR}/conf/application.yml"
#设置需要加载的包的目录 最后加上项目主包
CLASSPATH=".:${ROOT_DIR}/lib/*:${ROOT_DIR}/conf/*"
#这里可替换为你自己的执行程序,其他代码无需更改
ENV=dev

#设置虚拟机参数
JAVA_OPTS="-server -Xmx512m -Xms512m -Xmn256m -Xss256k -XX:MetaspaceSize=96m"
JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC"
JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC"
JAVA_OPTS="$JAVA_OPTS -XX:CMSMaxAbortablePrecleanTime=5000"
JAVA_OPTS="$JAVA_OPTS -XX:+CMSClassUnloadingEnabled "
JAVA_OPTS="$JAVA_OPTS -XX:+CMSParallelRemarkEnabled"
JAVA_OPTS="$JAVA_OPTS -XX:+UseFastAccessorMethods"
JAVA_OPTS="$JAVA_OPTS -XX:+UseCMSInitiatingOccupancyOnly"
JAVA_OPTS="$JAVA_OPTS -XX:+ExplicitGCInvokesConcurrent"
JAVA_OPTS="$JAVA_OPTS -XX:CMSInitiatingOccupancyFraction=80"
JAVA_OPTS="$JAVA_OPTS -XX:SurvivorRatio=10"
JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=1g"
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_HOME/java.hprof"
JAVA_OPTS="$JAVA_OPTS -Xloggc:$LOG_HOME/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
JAVA_OPTS="$JAVA_OPTS -Dlog_path=$LOG_HOME"

#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh 执行脚本.sh [start|stop|restart|status] [dev]|[test]|[prod]"
    exit 1
}

#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
  #如果不存在返回1,存在返回0
  if [ -z "${pid}" ]; then
   return 0
  else
    return 1
  fi
}

#启动方法
start(){

  if [ ! -d "${LOG_HOME}" ]; then
    mkdir ${LOG_HOME}
  fi

  if [ -f "$APP_CONF" ];then
      PARAM="--spring.config.location=${APP_CONF} --spring.profiles.active=${ENV}"
  else
      PARAM="--spring.profiles.active=${ENV}"
  fi

  is_exist
  if [ $? -eq "0" ]; then
      echo "Service  start ..."
      #采用加载所有jar 和指定 main class 启动方式
      nohup java ${JAVA_OPTS} -classpath ${CLASSPATH} -jar $APP_NAME ${PARAM} >/dev/null 2>&1 &
      echo $! > $PIDFILE
      echo "Service  start SUCCESS. "
  else
      echo "Service is already started."

  fi
}

#停止方法
#停止方法
stop(){

  is_exist
  if [ $? -eq "0" ]; then
    echo "Service is already stop ..."
    rm -rf $PIDFILE
  else
    rm -rf $PIDFILE
    pid=`ps -ef |grep -i ${APP_NAME} |grep -v grep |awk -F" " '{print $2}'`
    if [ ! -n "$pid" ];then
        echo "Service is already stop ..."
    else
        kill -9 $pid
        rm -rf $PIDFILE
        echo "Service is stop SUCCESS!"
    fi
  fi

}

#输出运行状态
status(){
  if [ -f "$PIDFILE" ]; then
    pid=`cat "$PIDFILE"`
    pid=`ps -ef|grep $pid|grep -v "grep" |awk -F" " '{print $2}'`
    if [ -z $pid ];then
      echo "${APP_NAME} is NOT running."
    else
      echo "${APP_NAME} is running. Pid is ${pid}"
    fi
  else
    is_exist
    if [ $? -eq "0" ];then
      echo "${APP_NAME} is NOT running."
    else
      echo "${APP_NAME} is running. Pid is ${pid}"
    fi
  fi
}

#重启
restart(){
  stop
  start
}

if [ $2 ];then
  ENV=$2
fi
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

 注:

   启动、停止、重启、查看状态:sh deamon.sh [start|stop|restart|status] [dev]|[test]|[prod]

3.自作系统级别开机自启动脚本

创建启动脚本

vi /usr/lib/systemd/system/service-manage.service

内容如下:

[Unit]
Description=service-manage
After=network.target

[Service]
Type=forking

Environment=HOME=/root/service-manage/bin
ExecStart=/root/service-manage/bin/deamon.sh start prod
ExecReload=/root/service-manage/bin/deamon.sh restart prod
ExecStop=/root/service-manage/bin/deamon.sh stop prod
PrivateTmp=true

[Install]
WantedBy=multi-user.target

4.启动、重启、停止

4.启动、重启、停止

#启动该服务
systemctl start service-manage.service

#查看该服务状态
systemctl status service-manage.service

#重启服务
systemctl restart service-manage.service

#停止服务状态
systemctl stop service-manage.service

5.设置开机自启动

进行启动停止服务,执行如下命令

#重新加载所有service服务
systemctl daemon-reload

#开机启动service-manage.service
systemctl enable service-manage.service

#查看该service是否开机启用
systemctl is-enabled service-manage.service

#查询开机启动项服务
systemctl list-unit-files 

#过滤启动项
systemctl list-unit-files | grep enable
#过滤未启动项
systemctl list-unit-files | grep disabled

#过滤某个服务
systemctl list-unit-files | grep service-manage

 

posted on 2023-07-10 15:41  uestc2007  阅读(401)  评论(0编辑  收藏  举报

导航