使用Shell实现一个看门狗功能

最近在使用Prometheus+Grafana监控系统过程中,发下部分服务器的客户端监控经常停掉,因此需要再客户端编写一个看门狗脚本定时检查客户端端口是否启动,如果没有启动则启动相关程序。

脚本

watchdog.sh脚本内容如下:

#!/bin/bash

# 配置部分
PORT=1801
CHECK_INTERVAL=10    # 检查间隔时间,单位为秒
START_COMMAND="nohup /data/public/node_exporter/node_exporter --web.listen-address=:1801 > /data/public/node_exporter/start.log &"  # 启动服务的命令,根据实际情况修改
# 日志记录文件路径(服务器A)
LOG_RECORD_FILE="/data/public/node_exporter/watchdog.log"

# 函数:检查端口是否开放
check_port() {
    if nc -z localhost "$PORT"; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') - 端口 $PORT 已开放。" >> "$LOG_RECORD_FILE"
        return 0
    else
        echo "$(date '+%Y-%m-%d %H:%M:%S') - 端口 $PORT 未开放,尝试启动服务..." >> "$LOG_RECORD_FILE"
        return 1
    fi
}

# 主循环
while true; do
    if ! check_port; then
        eval "$START_COMMAND"
        # 可选:检查服务是否成功启动
        if check_port; then
            echo "$(date '+%Y-%m-%d %H:%M:%S') - 服务已成功启动。" >> "$LOG_RECORD_FILE"
        else
            echo "$(date '+%Y-%m-%d %H:%M:%S') - 服务启动失败,请检查日志。" >> "$LOG_RECORD_FILE"
        fi
    fi
    sleep "$CHECK_INTERVAL"
done

运行

设置脚本运行权限
chmod 777 watchdog.sh
执行脚本
./watchdog.sh &
检查运行日志
tail -f ./watchdog.log

[root@test node_exporter]# tail -f  watchdog.log
2025-01-24 14:32:12 - 端口 1801 已开放。
2025-01-24 14:32:22 - 端口 1801 已开放。
2025-01-24 14:32:32 - 端口 1801 已开放。
2025-01-24 14:32:42 - 端口 1801 已开放。
2025-01-24 14:32:52 - 端口 1801 已开放。
2025-01-24 14:33:02 - 端口 1801 已开放。
2025-01-24 14:33:12 - 端口 1801 已开放。
2025-01-24 14:33:22 - 端口 1801 已开放。
2025-01-24 14:33:32 - 端口 1801 已开放。
2025-01-24 14:33:42 - 端口 1801 已开放。
2025-01-24 14:33:52 - 端口 1801 已开放。
2025-01-24 14:34:02 - 端口 1801 已开放。
2025-01-24 14:34:12 - 端口 1801 已开放。
2025-01-24 14:34:22 - 端口 1801 已开放。

说明看门狗程序已经成功启动。

使用系统定时任务执行

(1)首先需要改造一下上面的脚本

#!/bin/bash

# 配置部分
PORT=1801
START_COMMAND="nohup /data/public/node_exporter/node_exporter --web.listen-address=:1801 > /data/public/node_exporter/start.log &"  # 启动服务的命令,根据实际情况修改
# 日志记录文件路径(服务器A)
LOG_RECORD_FILE="/data/public/node_exporter/watchdog.log"

# 函数:检查端口是否开放
check_port() {
    if nc -z localhost "$PORT"; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') - 端口 $PORT 已开放。" >> "$LOG_RECORD_FILE"
        return 0
    else
        echo "$(date '+%Y-%m-%d %H:%M:%S') - 端口 $PORT 未开放,尝试启动服务..." >> "$LOG_RECORD_FILE"
        return 1
    fi
}

if ! check_port; then
    eval "$START_COMMAND"
    # 可选:检查服务是否成功启动
    if check_port; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') - 服务已成功启动。" >> "$LOG_RECORD_FILE"
    else
        echo "$(date '+%Y-%m-%d %H:%M:%S') - 服务启动失败,请检查日志。" >> "$LOG_RECORD_FILE"
    fi
fi

(2)设置脚本执行权限
chmod 777 watchdog.sh
(3)配置定时任务
使用crontab -e命令

[root@test node_exporter]# crontab -e
*/1 * * * * /data/public/node_exporter/watchdog.sh

常见问题

(1)nc未安装,执行yum install nc -y即可

[root@test node_exporter]# ./watchdog.sh
./watchdog.sh: line 11: nc: command not found
./watchdog.sh: line 11: nc: command not found
nohup: redirecting stderr to stdout
[root@test node_exporter]#
[root@test node_exporter]#
[root@test node_exporter]#
[root@test node_exporter]#
[root@test node_exporter]# yum install nc -y
Last metadata expiration check: 0:07:44 ago on Fri 24 Jan 2025 02:35:15 PM CST.
Dependencies resolved.
=======================================================================================================================================
 Package                        Architecture              Version                             Repository                          Size
=======================================================================================================================================
Installing:
 nmap                           aarch64                   2:7.70-12.ky10                      ks10-adv-os                        5.8 M
Installing dependencies:
 libssh2                        aarch64                   1.9.0-8.ky10                        ks10-adv-updates                   167 k
 libssh2-help                   noarch                    1.9.0-8.ky10                        ks10-adv-updates                   182 k

Transaction Summary
=======================================================================================================================================
Install  3 Packages

Total download size: 6.2 M
Installed size: 25 M
Downloading Packages:
(1/3): libssh2-1.9.0-8.ky10.aarch64.rpm                                                                 57 MB/s | 167 kB     00:00
(2/3): libssh2-help-1.9.0-8.ky10.noarch.rpm                                                             54 MB/s | 182 kB     00:00
(3/3): nmap-7.70-12.ky10.aarch64.rpm                                                                   249 MB/s | 5.8 MB     00:00
---------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                  248 MB/s | 6.2 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                               1/1
  Installing       : libssh2-help-1.9.0-8.ky10.noarch                                                                              1/3
  Installing       : libssh2-1.9.0-8.ky10.aarch64                                                                                  2/3
  Installing       : nmap-2:7.70-12.ky10.aarch64                                                                                   3/3
  Running scriptlet: nmap-2:7.70-12.ky10.aarch64                                                                                   3/3
  Verifying        : nmap-2:7.70-12.ky10.aarch64                                                                                   1/3
  Verifying        : libssh2-1.9.0-8.ky10.aarch64                                                                                  2/3
  Verifying        : libssh2-help-1.9.0-8.ky10.noarch                                                                              3/3

Installed:
  nmap-2:7.70-12.ky10.aarch64               libssh2-1.9.0-8.ky10.aarch64               libssh2-help-1.9.0-8.ky10.noarch

Complete!
[root@test node_exporter]#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

angushine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值