Springboot微服务启动脚本和服务监控脚本(shell)

Springboot微服务启动脚本和服务监控脚本(shell)

分享一个Springboot微服务启动脚本和服务监控脚本。

1. 启动脚本(存在则重启)

#!/bin/bash  
  
# 定义JAR包路径  
SERVICE_NAME="lotteryservice"
JAR_NAME="xcloud-lotteryservice-web-1.0-SNAPSHOT.jar"


SERVICE_PATH="/home/service/$SERVICE_NAME"
JAR_PATH="$SERVICE_PATH/$JAR_NAME"
PROFILE=prod
#PROFILE=alibaba
echo $JAR_PATH
  
# 检查是否存在运行的进程  存在即kill
function check_and_kill_process {  
    PID=$(ps -ef | grep "java -jar $JAR_PATH" | grep -v grep | awk '{print $2}')
	echo $PID
    if [ -n "$PID" ]; then  
        echo "Killing existing process with PID: $PID ($SERVICE_NAME)"  
        kill -9 $PID  
        sleep 5 # 等待进程完全终止  
    fi  
}  
  
# 启动服务  
function start_service {  
    echo "Starting $SERVICE_NAME ..."  
    java -jar ${JAR_PATH} --spring.profiles.active=${PROFILE} &  
    echo "$SERVICE_NAME started."  
}  
  
# 执行检查并杀掉进程  
check_and_kill_process  
  
# 启动服务  
start_service

2. 监控脚本

即服务健康检查,监控服务是否正常启动,未正常启动,则调用启动脚本

关键点:

1) 检查进程是否存在
2) 进程存在,检查是否僵死,请求健康检查URL,注意设置curl超时时间

#!/bin/bash  
  
# 定义JAR包路径(这里可能不需要,但用于说明)
SERVICE_NAME="demoservice"
JAR_NAME="demoservice-web-1.0-SNAPSHOT.jar"

SERVICE_PATH="/home/service/$SERVICE_NAME"
JAR_PATH="$SERVICE_PATH/$JAR_NAME"
restartShell="$SERVICE_PATH/start.sh "

echo $JAR_PATH
  
# 定义服务健康检查URL  
HEALTH_CHECK_URL="http://localhost:9999/health/check"  

echo "[$(date +'%Y-%m-%d %H:%M:%S')][info]Begin check....."

# 检查是否存在运行的进程  
function check_process {  
    PID=$(ps -ef | grep "java -jar $JAR_PATH" | grep -v grep | awk '{print $2}')
    echo "    PID is $PID"
    if [ -n "$PID" ]; then  
        return 0 # 进程存在 
    else  
        return 1 # 进程不存在 
    fi  
} 

  
# 发送HTTP请求到健康检查端点  
function check_service_health {
    # 设置 curl 的超时时间,例如设置为5秒 整体不超过10秒
    CURL_TIMEOUT=5
    MAX_TIME=10

    RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout $CURL_TIMEOUT --max-time $MAX_TIME $HEALTH_CHECK_URL)
    # 检查 curl 的退出状态
    CURL_EXIT_STATUS=$?
    echo "    CURL_EXIT_STATUS $CURL_EXIT_STATUS"
    echo "    RESPONSE CODE $RESPONSE"

    # 如果 curl 因为超时而退出(退出状态为7),或者 HTTP 状态码不是200,返回1
    if [ "$CURL_EXIT_STATUS" -ne 0 ] || [ "$RESPONSE" -ne 200 ]; then
        return 1 # 返回1表示服务不健康
    else
        return 0 # 返回0表示服务健康
    fi
}

# 如果进程不存在则重启 并推出 
if ! check_process; then  
    echo "====[error] $SERVICE_NAME check_process is not exist, attempting to restart..."   
    # 调用启动脚本  
    nohup sh ${restartShell} >/dev/null 2>&1 &
    exit 0 # 退出脚本,并返回状态码 0
fi
  
# 进程存在 继续检查服务健康状态,如果不健康则重启  
if check_service_health; then  
    echo "    $SERVICE_NAME is healthy."  
else  
    echo "====[error] $SERVICE_NAME is not healthy, attempting to restart..."  
    # 调用启动脚本  
    nohup sh ${restartShell} >/dev/null 2>&1 &
fi

3. 设置crontab

根据自己需要设置定时任务

#每10分钟检测一次
*/10 * * * * /bin/sh /home/service/monitor.sh >> /home/service/health.log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值