CentOS7服务自启动、保活

背景

当我们开发完程序后,会将成果物部署在linux环境上运行(生产环境一般是centos7),势必会遇到服务器重启、停电、服务内部异常挂掉等因素导致我们之前部署的服务无法在环境恢复后自动恢复,因此为了实现生产环境中单机服务的高可用,需将服务设置为开机自启动,并定时检测服务存活状态,不存活就拉起。

整体思路

编写shell 脚本
按脚本职责可大体分为两类:安装脚本执行脚本
安装脚本负责将服务注册到开机任务中,同时配置系统定时任务定期检测并拉取服务

在这里插入图片描述

安装脚本(nacos-install.sh)功能(以nacos开源组件为例)

1)环境变量添加(如果需要)

前提条件:如果没有JAVA环境,还需要配置JDK环境变量

#!/bin/bash
# 初始化方法,添加nacos安装路径到系统环境变量
. /etc/profile
NACOS_HOME=`pwd`
init_nacos_path(){
    #删除已有的任务
    sed -i "/.*NACOS_PATH*./d" /etc/profile
    #添加环境变量
    echo "export NACOS_PATH=$NACOS_HOME" >> /etc/profile
    echo "export PATH=\$NACOS_PATH:\$PATH" >> /etc/profile
    source /etc/profile
}

2)系统服务添加,实现服务开机自启动和systemctl命令操作

system_init_task(){
  echo "[Unit]
Description=nacos server
After=network.target

[Service]
Type=forking
ExecStart=${NACOS_HOME}/nacos.sh start
ExecStop=${NACOS_HOME}/nacos.sh stop
ExecReload=${NACOS_HOME}/nacos.sh restart

[Install]
WantedBy=multi-user.target
" > /usr/lib/systemd/system/nacos.service
  chmod 777 /usr/lib/systemd/system/nacos.service
  systemctl enable nacos.service
#  systemctl daemon-reload
  systemctl start nacos.service
}

生成【服务名称.service】还有其他方式,比如给定一个模板,通过sed工具将里面的值替换,然后拷贝到/usr/lib/systemd/system/下并赋予执行权限

# 模板
[Unit]
Description=placeholder
After=network.target

[Service]
Type=forking
Restart=no
KillMode=control-group
ExecStart=placeholder
ExecStop=placeholder
ExecReload=placeholder

[Install]
WantedBy=multi-user.target
sed -i "2c Description=NACOS server" ${NACOS_HOME}/template.service
sed -i "9c ExecStart=${NACOS_HOME}/nacos.sh start" ${NACOS_HOME}/template.service
sed -i "10c ExecStop=${NACOS_HOME}/nacos.sh stop" ${NACOS_HOME}/template.service
sed -i "11c ExecReload=${NACOS_HOME}/nacos.sh restart" ${NACOS_HOME}/template.service
cp ${NACOS_HOME}/template.service  /usr/lib/systemd/system/nacos.service

3)添加定时任务到crontab,定时检测服务进程是否存活,不存活则拉起进程

这里通过shell将任务规则写入到/etc/crontab中,任务触发的是执行脚本

#定时任务
schedule_task(){
    #删除已有的任务
    sed -i "/.*nacos*./d" /etc/crontab
    #添加新的启动任务
    echo "* * * * * root $NACOS_PATH/nacos.sh start" >> /etc/crontab
}

执行脚本(nacos.sh)功能(以nacos开源组件为例)

1)环境变量引入(如果需要)

#!/bin/bash
#引入环境变量文件
. /etc/profile
NACOS_HOME=$NACOS_PATH

2)服务状态查询,查询服务进程是否存在

status(){
is_nacos_exist
if [ $? -eq 1 ]
then
   #nacos pid不存在,返回1
   echo "NACOS has stopped!"
   return 1
else  
   #nacos pid存在,返回0
   echo "NACOS is running, pid: $NACOS_PID"
   return 0
fi
}
is_nacos_exist(){
   #启动naocs
   NACOS_PID=`$JAVA_HOME/jps | grep nacos | awk '{print $1}'`
   if [ -z $NACOS_PID ]
then
   #nacos pid不存在,返回1
   return 1
else
   #nacos pid存在,返回0
   return 0
fi
}

3)服务启动,如果已经启动就提示已启动

start() {
is_nacos_exist
if [ $? -eq 1 ]
then
   echo "NACOS is starting..." 
   #启动naocs
   $NACOS_HOME/bin/startup.sh -m standalone >> $NACOS_HOME/nacos.out 2>&1
   START_CODE=$?
   if [ $START_CODE -eq 0 ]
   then
       echo "NACOS start success!"
   else 
       echo "NACOS start failed!"
   fi
else
   echo "NACOS is running, pid: $NACOS_PID"
fi
}

4)服务停止,通过kill杀死进程

stop(){
is_nacos_exist
if [ $? -eq 0 ]
    then
    #停止nacos
        $NACOS_HOME/bin/shutdown.sh >> $NACOS_HOME/nacos.out 2>&1
        STOP_CODE=$?
        echo "NACOS is stopping!"
        if [ $STOP_CODE -eq 0 ]
        then
            echo "NACOS stop success!"
        else
            echo "NACOS stop failed!"
        fi
    else 
        echo "NACOS has stopped!"
fi
exit 0

5)服务重启,先服务停止后服务启动

restart(){
   stop
   sleep 3
   start
}

命令操作方式

1)输入jps可查看当前服务进程
2)systemctl [start | status | restart] 服务名称.service
3 ) 任意路径下【服务名称.sh [start | status | restart]】

特性

1)自动化安装运行
2)服务开机自启动
3)服务保活(看门狗)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值