linux通用服务启动、停止脚本和自动重启监控脚本(start/stop/watch.sh)

start.sh(启动服务)

此脚本用于直接启动服务,但是如果程序崩溃或者异常等导致挂掉后并不能自动重启

#!/bin/bash

SERVICE_LIB_PATH="./lib"

SERVICE_PATH="/root/testserver"

SERVICE_NAME="testserver"

START_CMD="./$SERVICE_NAME"

LOG_FILE="run.log"

cd $SERVICE_PATH

pwd

export LD_LIBRARY_PATH=$SERVICE_LIB_PATH:$LD_LIBRARY_PATH
# 后台运行服务 且输出重定向到LOG_FILE中
nohup ${START_CMD} > ${LOG_FILE} 2>&1 &

# 获取子进程的PID
server_pid=$!

echo `date +%Y-%m-%d` `date +%H:%M:%S` "$SERVICE_NAME(PID:${server_pid}) start"

watch.sh(启动服务并持续监控服务是否在运行)

此脚本除了可启动服务外,还定时监控目标服务是否在运行,如果未运行会自动启动目标服务
此脚本运行前,会先运行stop.sh,防止重复启动程序
注意:此脚本运行时需要用nohup在后台运行(或者其他方法),如果直接./watch.sh &则关闭终端后监控就失效了,不能自动启动目标服务了,所以下面还有个runwatch.sh脚本

#!/bin/bash
#启动watch进程 监控server是否在运行,如果未运行则自动启动程序
#建议用runwatch后台启动本监控脚本

SERVICE_NAME="testserver"

sh ./stop.sh

# 获取当前脚本的PID
current_pid=$$
# 保存当前脚本的PID 用于stop.sh中杀死此监控脚本进程
echo $current_pid > testwatch.pid

while true 
do

    procnum=`ps -ef|grep $SERVICE_NAME|grep -v grep|wc -l`

    if [ $procnum -eq 0 ]
    then
		# 当目标服务进程未运行时 运行run.sh启动服务
        echo `date +%Y-%m-%d` `date +%H:%M:%S` "watch.sh(PID:$current_pid) start service : $SERVICE_NAME"

        sh ./run.sh

    fi

    sleep 2

done

runwatch.sh(后台运行watch.sh脚本)

用来后台运行watch.sh脚本

#!/bin/bash
#后台运行监控脚本

LOG_FILE="runwatch.log"

nohup ./watch.sh > ${LOG_FILE} 2>&1 &

stop.sh(停止服务运行)

停止服务运行,主要有两步,先杀死watch脚本进程,再杀死服务进程
杀死服务进程我时用的pkill,如果想用kill可以自行替换

#!/bin/bash
# 本文件用于杀死watch进程和server进程

SERVICE_NAME="testserver"
# watch进程的pid缓存文件
PIDFILE="./testwatch.pid"

##############################杀死watch进程########################################
# 从文件中读取PID
PID=$(cat $PIDFILE)
 
# 检查PID是否存在
if kill -0 "$PID" 2>/dev/null; then
    # PID存在,杀死进程
    kill -9 $PID
    # 检查进程是否被杀死
    if ps -p $PID > /dev/null 
    then
        echo "watch进程$PID未能被杀死。"
    else
        echo "watch进程$PID已被杀死。"
    fi
else
    echo "watch进程PID $PID 不存在或无法杀死。"
fi
rm -f $PIDFILE


##############################杀死server进程########################################
pkill -9 $SERVICE_NAME

procnum=`ps -ef|grep $SERVICE_NAME|grep -v grep|wc -l`
if [ $procnum -eq 0 ]
then
    echo "server进程 $SERVICE_NAME 已被杀死。"
else
    echo "server进程 $SERVICE_NAME 未能被杀死。"
fi

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值