51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

linux下监视进程 崩溃挂掉后自动重启的shell脚本(nginx, mysql,nacos,redis, docker)

linux 自动重启服务 shell

linux下监视进程 崩溃挂掉后自动重启的shell脚本 - Python技术站 (pythonjishu.com)

新建 日志存放目录:

 mkdir /mnt/data/logs/monitor -p 

脚本路径:

/mnt/data/zzy/scripts

案例一: 监控nginx

1:脚本:cat monitor_nginx.sh

#!/bin/bash

PROCESS_NAME="nginx"

# 使用pgrep命令来查找进程id
PROCESS_ID=$(pgrep "${PROCESS_NAME}")

if [ "${PROCESS_ID}" = "" ]; then
    echo  $(date +%T%n%F) "Nginx is not running. Starting it..."
    #/etc/init.d/nginx start
    systemctl start nginx
else
    echo    "Nginx is running. Checking if it's healthy..."
    # 检测进程是否正常运行
    RESULT=$(kill -0 "${PROCESS_ID}" 2>&1)
    if [[ "${RESULT}" =~ "No such process" ]]; then
        echo $(date +%T%n%F) "Nginx is not running. Restarting it..."
        # 结束进程
        kill -9 "${PROCESS_ID}"
        # 启动进程
        /etc/init.d/nginx start
       systemctl start nginx
    else
        echo "Nginx is running normally."
    fi
fi

2- 定时任务:

vim /etc/crontab

5分钟检测一次

*/5 * * * * root sh /mnt/data/zzy/scripts/monitor_nginx.sh  >>/mnt/data/logs/monitor/nginxstatus.log 2>&1

cat /mnt/data/logs/monitor/nginxlogfile.log

案例二: 监控mysql

1- 脚本 cat monitor_mysql.sh

#!/bin/bash

PROCESS_NAME="mysqld"

# 使用pgrep命令来查找进程id
PROCESS_ID=$(pgrep "${PROCESS_NAME}")

if [ "${PROCESS_ID}" = "" ]; then
    echo  $(date +%T%n%F) "MySQL is not running. Starting it..."
    #/etc/init.d/mysql start
    systemctl start mysql
else
    echo   "MySQL is running. Checking if it's healthy..."
    # 检测进程是否正常运行
    RESULT=$(kill -0 "${PROCESS_ID}" 2>&1)
    if [[ "${RESULT}" =~ "No such process" ]]; then
        echo $(date +%T%n%F) "MySQL is not running. Restarting it..."
        # 结束进程
        kill -9 "${PROCESS_ID}"
        # 启动进程
       # /etc/init.d/mysql start
       systemctl start mysql
    else
        echo "MySQL is running normally."
    fi
fi

2- 定时任务:

vim /etc/crontab

*/5 * * * * root sh  /mnt/data/zzy/scripts/monitor_mysql.sh >>/mnt/data/logs/monitor/mysqlstatus.log 2>&1

案例三: 监控docker

1-脚本

cat monitor_docker.sh

#!/bin/bash
  
PROCESS_NAME="docker"

# 使用pgrep命令来查找进程id
PROCESS_ID=$(pgrep "${PROCESS_NAME}")

if [ "${PROCESS_ID}" = "" ]; then
    echo  $(date +%T%n%F) "Docker is not running. Starting it..."
    #/etc/init.d/mysql start
    systemctl start docker
else
    echo   "Docker is running. Checking if it's healthy..."
    # 检测进程是否正常运行
    RESULT=$(kill -0 "${PROCESS_ID}" 2>&1)
    if [[ "${RESULT}" =~ "No such process" ]]; then
        echo $(date +%T%n%F) "Docker is not running. Restarting it..."
        # 结束进程
        kill -9 "${PROCESS_ID}"
        # 启动进程
       # /etc/init.d/mysql start
       systemctl start docker
    else
        echo "Docker  is running normally."
    fi
fi

2- 定时任务

vim /etc/crontab

*/5 * * * * root sh  /mnt/data/zzy/scripts/monitor_docker.sh >>/mnt/data/logs/monitor/dockerstatus.log 2>&1

案例四: nacos(不太一样)

cat monitor_nacos.sh

#!/bin/bash

PROCESS_NAME="nacos"

# 使用pgrep命令来查找进程id
#PROCESS_ID=$(pgrep "${PROCESS_NAME}")
PROCESS_ID=$(ps -ef | grep nacos.nacos | grep -v grep | awk '{print $2}')

if [ "${PROCESS_ID}" = "" ]; then
    echo  $(date +%T%n%F) " $PROCESS_NAME is not running. Starting it..."
    #/etc/init.d/nginx start
    /mnt/data/nacos/nacos/bin/startup.sh -m standalone


else
    echo    "$PROCESS_NAME is running. Checking if it's healthy..."
    # 检测进程是否正常运行
    RESULT=$(kill -0 "${PROCESS_ID}" 2>&1)
    if [[ "${RESULT}" =~ "No such process" ]]; then
        echo $(date +%T%n%F) "$PROCESS_NAME is not running. Restarting it..."
        # 结束进程
        kill -9 "${PROCESS_ID}"
        # 启动进程
        /mnt/data/nacos/nacos/bin/startup.sh -m standalone
    else
        echo "$PROCESS_NAME is running normally."
    fi
fi

案例五: 脚本优化后 redis

赞(0)
未经允许不得转载:工具盒子 » linux下监视进程 崩溃挂掉后自动重启的shell脚本(nginx, mysql,nacos,redis, docker)