linux程序执行shell后宕,linux宕机重启后 执行脚本按顺序启动各个服务

linux宕机重启后 执行脚本按顺序启动各个服务

场景:

服务器:linux centos 8.2

现docker容器里跑的程序有:

1.服务发现与注册:nacos

2.网关:gateway

3.微服务:org等...

4.docker外还跑了些java -jar 直启的微服务:facereport

服务器最近一次重启,nacos起来了,但是某几个微服务访问不通。docker ps一看其实就是有几个微服务忘记配开机自启压根没起来,当时以为是nacos没启动好,这几个微服务启动时没注册进去...然后拿着这个错误的思路去写了个脚本。。。写完才发现,根本不需要!(原因查看这篇:nacos状态对微服务的影响测试)尴尬。不过还是记录下脚本吧。。

思路:

脚本很简单,就是顺序启动你的服务,大致按照这个顺序:

f368832372d4

image.png

如果你需要判断数据库的话,也可以把数据库放在服务注册前面。

脚本代码:

#!/bin/bash

# 用途:linux centos 8.2系统宕机重启后,依次启动各个服务

# 服务启动顺序:

# 1.服务注册与发现(nacos)

# 2.配置中心(暂无)

# 3.网关服务(gateway)

# 4.监控服务(暂无)

# 5.微服务(org profile等)

# 前提:docker能开机自启动

# 注意:赋予此脚本执行权限,执行过就不必执行了 # chmod +x ./autoStartService.sh

#

# ========================》配置-----start

# 服务器IP:

localHost="xxx.xxx.xx.xxx"

# [注册中心]:

registerName="nacos"

registerPort="8848"

# [微服务]:

# docker容器中的微服务名称数组(docker ps后的names列)

dockerServiceNameArr=(gateway org profile geo kri ct resistance quake stress hole earthsound kj470)

dockerServicePortArr=(81 82 83 84 85 86 87 88 89 90 91 92)

# java直启的微服务名称数组

javaServiceNameArr=(facereport)

javaServicePathJarArr=(/opt/spring-cloud-service/facereport/AppFacereport.jar)

javaServicePortArr=(93)

# 睡眠时间/秒

SLEEP_TIME=2

# 日志路径

LOG_PATH=/root/autoStartService/log

# ========================》配置-----end

CURRENT_TIME=""

CURRENT_DATE=""

getAtTime() {

CURRENT_TIME="$(date +%Y-%m-%d-%H:%M:%S) --- "

CURRENT_DATE=$(date +%Y-%m-%d)

}

# 一、等待初始化:

#sleep 120

# 启动函数

autoStartWebService() {

##如果日志路径不存在则创建

if [ ! -d "$LOG_PATH" ]; then

mkdir -p $LOG_PATH

fi

getAtTime

echo "--------------------------------------------" >>${LOG_PATH}/"$CURRENT_DATE"_autoStartService.log

echo "===》go autoStartWebService at $CURRENT_TIME" >>${LOG_PATH}/"$CURRENT_DATE"_autoStartService.log

# 启动后,睡眠30秒之后,继续循环,一共监测10次

for i in $(seq 1 10); do

getAtTime

echo "$CURRENT_TIME excuting(${i} times) function autoStartWebService" >>${LOG_PATH}/"$CURRENT_DATE"_autoStartService.log

startRegisterService

sleep $((${SLEEP_TIME} * 15))

done

echo "===》exit autoStartWebService at $CURRENT_TIME" >>${LOG_PATH}/"$CURRENT_DATE"_autoStartService.log

}

# 二、启动注册中心:

startRegisterService() {

echo "===>startRegisterService..."

req_message=$(nc -w 1 ${localHost} ${registerPort}

if test $((req_message)) -eq 200; then

getAtTime

echo "$CURRENT_TIME Nacos is running..." >>${LOG_PATH}/"$CURRENT_DATE"_autoStartService.log

else

container_id=$(docker ps -a | grep ${registerName} | grep -v grep | awk '{print $1}')

getAtTime

echo "$CURRENT_TIME ${registerName} container id is ${container_id}, start it..." >>${LOG_PATH}/"$CURRENT_DATE"_autoStartService.log

echo "启动${registerName}..."

# docker start ${container_id}

sleep $SLEEP_TIME

fi

startDockerService

startJavaService

}

# 三、启动docker容器下的微服务:

startDockerService() {

echo "===>startDockerService..."

for i in $(seq 0 `expr ${#dockerServiceNameArr[@]} - 1`); do

dockerServiceName=${dockerServiceNameArr[$i]}

dockerServicePort=${dockerServicePortArr[$i]}

req_message=$(nc -w 1 ${localHost} ${dockerServicePort}

if test $((req_message)) -eq 200; then

getAtTime

echo "$CURRENT_TIME ${dockerServiceName} service is running..." >>${LOG_PATH}/"$CURRENT_DATE"_autoStartService.log

else

container_id=$(docker ps -a | grep ${dockerServiceName} | grep -v grep | awk '{print $1}')

getAtTime

echo "$CURRENT_TIME ${dockerServiceName} service container id is ${container_id}, start it..." >>${LOG_PATH}/"$CURRENT_DATE"_autoStartService.log

echo "启动${dockerServiceName}..."

# docker start ${container_id}

sleep $SLEEP_TIME

fi

done

}

# 三、启动非docker容器下的微服务:

startJavaService() {

echo "===>startJavaService..."

for i in $(seq 0 `expr ${#javaServiceNameArr[@]} - 1`); do

javaServiceName=${javaServiceNameArr[$i]}

javaServicePathJar=${javaServicePathJarArr[$i]}

javaServicePort=${javaServicePortArr[$i]}

req_message=$(nc -w 1 ${localHost} ${javaServicePort}

if test $((req_message)) -eq 200; then

getAtTime

echo "$CURRENT_TIME ${javaServiceName} service is running..." >>${LOG_PATH}/"$CURRENT_DATE"_autoStartService.log

else

getAtTime

echo "$CURRENT_TIME ${javaServiceName} service, start it..." >>${LOG_PATH}/"$CURRENT_DATE"_autoStartService.log

echo "启动${javaServiceName}..."

# nohup java -jar ${javaServicePathJar} &

sleep $SLEEP_TIME

fi

done

}

# 启动

autoStartWebService

############################# 附:现有服务的配置项 start

# # docker容器中的注册中心:

# PORT NAMES

# 8848 nacos

# # docker容器中的微服务:

# PORT NAMES

# 81 gateway

# 82 org

# 83 profile

# 84 geo

# 85 kri

# 86 ct

# 87 resistance

# 88 quake

# 89 stress

# 90 hole

# 91 earthsound

# 92 kj470

# # java直启的微服务:

# PORT NAMES pathJar

# 93 facereport /opt/spring-cloud-service/facereport/AppFacereport.jar

############################# 附:现有服务的配置项 end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值