最近在使用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"; thenecho "$(date '+%Y-%m-%d %H:%M:%S') - 端口 $PORT 已开放。" >> "$LOG_RECORD_FILE"return 0elseecho "$(date '+%Y-%m-%d %H:%M:%S') - 端口 $PORT 未开放,尝试启动服务..." >> "$LOG_RECORD_FILE"return 1fi
}# 主循环
while true; doif ! check_port; theneval "$START_COMMAND"# 可选:检查服务是否成功启动if check_port; thenecho "$(date '+%Y-%m-%d %H:%M:%S') - 服务已成功启动。" >> "$LOG_RECORD_FILE"elseecho "$(date '+%Y-%m-%d %H:%M:%S') - 服务启动失败,请检查日志。" >> "$LOG_RECORD_FILE"fifisleep "$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"; thenecho "$(date '+%Y-%m-%d %H:%M:%S') - 端口 $PORT 已开放。" >> "$LOG_RECORD_FILE"return 0elseecho "$(date '+%Y-%m-%d %H:%M:%S') - 端口 $PORT 未开放,尝试启动服务..." >> "$LOG_RECORD_FILE"return 1fi
}if ! check_port; theneval "$START_COMMAND"# 可选:检查服务是否成功启动if check_port; thenecho "$(date '+%Y-%m-%d %H:%M:%S') - 服务已成功启动。" >> "$LOG_RECORD_FILE"elseecho "$(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 klibssh2-help noarch 1.9.0-8.ky10 ks10-adv-updates 182 kTransaction Summary
=======================================================================================================================================
Install 3 PackagesTotal 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 transactionPreparing : 1/1Installing : libssh2-help-1.9.0-8.ky10.noarch 1/3Installing : libssh2-1.9.0-8.ky10.aarch64 2/3Installing : nmap-2:7.70-12.ky10.aarch64 3/3Running scriptlet: nmap-2:7.70-12.ky10.aarch64 3/3Verifying : nmap-2:7.70-12.ky10.aarch64 1/3Verifying : libssh2-1.9.0-8.ky10.aarch64 2/3Verifying : libssh2-help-1.9.0-8.ky10.noarch 3/3Installed:nmap-2:7.70-12.ky10.aarch64 libssh2-1.9.0-8.ky10.aarch64 libssh2-help-1.9.0-8.ky10.noarchComplete!
[root@test node_exporter]#