如何使用shell脚本让jar包开机自启动

由于jar依赖于jdk,所以系统中需要安装该虚拟机,具体操作可以自行百度

以alibaba sentinel-dashboard 服务熔断保护框架为例
首先:写一个启动脚本,startup.sh,因为通过服务命令service启动脚本无法动态获取环境变量,所以我写死了我jdk安装的位置

注意:CentOS7系统有自带的openjdk,所以要把它卸了,因为oracle jdk 开发的项目与其不兼容(缺少很多关键的包和类)
1、rpm -qa | grep jdk
2、yum remove -y [openjdk名称,不要方括号]

在这里插入图片描述

#!/bin/bash
#环境变量建议写死,用service sentinel start获取不到,为什么呢??想到的是sh 与其不是一个层面的
JAVA_HOME=/home/soft/jdk8
JAR=/home/sentinel-dashboard-1.7.1.jar
PID=$(ps -ef | grep sentinel-dashboard | grep -v grep | grep /home/sentinel-dashboard-1.7.1.jar|awk '{print $2}')

if [  -f $PID ]
  then
    echo "Start sentinel-dashboard......$JAVA"
    nohup $JAVA_HOME/bin/java -jar $JAR >> /home/sentinel-dashboard.out 2>&1 &
    echo "Sentinel-dashboard start complete"
  else
    echo "Start sentinel-dashboard is fail,the PID is exists"
  fi

其次:再写一个停止项目的脚本shutdown.sh

#!/bin/sh
PID=$(ps -ef | grep sentinel | grep /home/sentinel-dashboard-1.7.1.jar | grep -v grep | awk '{print $2}')

echo $PID
if [ ! -f $PID ]
then
    echo "kill sentinel-dashboard process......!"
    #kill -7 不会马上终止进程,要等线程运行完
    kill -7 $PID
    while [ -x /proc/${PID} ]
    do
      echo "Waiting for Sentinel to shutdown ..."
      sleep 1
    done
    echo "Sentinel stopped"
else
  echo "sentinel-dashboard pid is not exists"
fi

还要再写一个重启的脚本restart.sh,当然其实就是先停止项目再启动

#!/bin/bash
START=/home/startup.sh
SHUTDOWN=/home/shutdown.sh
PID=$(ps -ef | grep sentinel | grep /home/sentinel-dashboard-1.7.1.jar | grep -v grep | awk '{print $2}')

if [ ! -f $PID ]
  then
    echo "Sentinel Service is restart......"
    sh $SHUTDOWN
  while [ -x /proc/${PID} ]
  do
    echo "Waiting for Sentinel......"
    sleep 1
  done
    echo "Sentinel stopped"
    sh $START
    echo "Sentinel reload sucess!"
  else
    echo "Please run as start"
fi

第四、就是写一个服务脚本,直接运行脚本即可,判断已经在脚本里面做了,这个服务脚本就不用做了,位置在:

/etc/init.d/sentinel
在这里插入图片描述

#!/bin/bash
STARTUP=/home/startup.sh
SHUTDOWN=/home/shutdown.sh
RELOAD=/home/restart.sh
PID=$(ps -ef | grep sentinel | grep /home/sentinel-dashboard-1.7.1.jar | grep -v grep | awk '{print $2}')

case "$1" in 
      start)
	  sh $STARTUP
	;;
      stop)
	  sh $SHUTDOWN
	;;
    reload)
	if [ ! -f $PID ]
	  then
	    echo "Ready reload......"
	    sh $RELOAD
	
	  else
	    echo "Please run as start!"
	fi
	;;
	*)
	    echo "Please use start or stop as first argument"
        ;;
esac

最后:就是要在/lib/systemd/system/下创建脚本sentinel.service,这是服务配置,与/etc/init.d/sentinel相关联,缺少它启动不来
在这里插入图片描述

[Unit]
Description=sentinel.service
After=network.target
[Service]
Type=forking
ExecStart=/home/startup.sh
ExecReload=/home/restart.sh
ExecStop=/home/stop.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target

做完上述几步,要给三个脚本赋予权限:

chmod a+x startup.sh
chmod a+x restart.sh
chmod a+x shutdown.sh
1、service sentinel start | stop | reload
2、chkconfig sentinel on | systemctl enable sentinel #开启开机自启动
3、chkconfig sentinel off | systemctl disable sentinel #关闭开机自启动

查看服务是否开启自启

在这里插入图片描述
注:竖杠为或的意思,程序员应该懂

名词解释:

ps -ef 查看所有进程
grep sentinel 查看信息
awk ‘{print $2}’ 取第二个参数的值

Unit服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
保存退出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值