Shell脚本实现服务器在线状态监控

Shell脚本实现服务器在线状态监控

阅读量:
评论数:

Shell脚本实现服务器在线状态监控

介绍

每分钟ping4次服务器IP,取平均值并取整,将时间、IP、ping值存于日志,保存3天文件,若连续3分钟ping为0,则发送服务器掉线通知,直到ping值不为0发送服务器上线通知。

需要安装mutt及msmtp并配置好SMTP,见使用Shell脚本获取雨天并发送通知邮件 - MJ的博客

脚本

脚本整体由ChatGPT生成,我只负责输入人话需求及小幅修改脚本。

vim ping.sh
#!/bin/bash

# 定义变量
ip="your_server_ip"   #域名应该也行
log_dir="替换为日志文件夹路径"
email="替换你的收信邮箱"
offline_notification_sent=false
ping_fail_count=0

# 检查日志目录是否存在,不存在则创建
if [ ! -d $log_dir ]; then
    mkdir -p $log_dir
fi

# 无限循环
while :
do
    # 计算当前日期
    date_str=$(date +"%Y-%m-%d")
    
    # ping服务器4次,计算平均值
    ping_result=$(ping -c 4 $ip | tail -1 | awk '{print $4}' | cut -d '/' -f 2 | awk '{printf("%d\n",$1 + 0.5)}')
    
    # 记录到log文件中
    log_file="$log_dir/ping-$date_str.log"
    echo "$(date +"%Y-%m-%d %H:%M:%S") 服务器 $ip 的ping值为 $ping_result ms" >> $log_file
    
    # 判断服务器是否掉线
    if [ $ping_result -eq 0 ]; then
        ((ping_fail_count++))
        if [ $ping_fail_count -eq 3 ] && [ "$offline_notification_sent" = false ]; then
            echo "$(date +%Y-%m-%d\ %H:%M:%S) 服务器 $ip 已掉线!" | mutt -s "服务器掉线通知" $email
            offline_notification_sent=true
        fi
    else
        ping_fail_count=0
        if [ "$offline_notification_sent" = true ]; then
            echo "$(date +%Y-%m-%d\ %H:%M:%S) 服务器 $ip 已恢复在线!" | mutt -s "服务器上线通知" $email
            offline_notification_sent=false
        fi
    fi
    
    # 清理3天前的日志文件
    find $log_dir -type f -name "ping-*" -mtime +2 -exec rm {} \;
    
    # 休眠1分钟
    sleep 60
done

添加执行权限

chmod +x ping.sh

后台运行

nohup ~/ping/ping.sh &  # 换成你的脚本路径

查看进程,结束进程

ps -le | grep ping

kill 脚本的pid

效果

测试下运行效果,手动开关vps,ping间隔调为10s。

ping_logs.png

可以正常收到邮件

mail-vps.webp

Built with Halo
主题 Stack Jimmy 设计 • 由Jiewen移植
📑共水了 93篇文章.
载入天数... 载入时分秒...
RSS Icon RSS订阅