Use scheduled tasks in a simple way to monitor server status

发布于 作者 量尺寸留下评论

apt install -y msmtp msmtp-mta ca-certificates

nano /etc/msmtprc

# 全局默认设置
defaults
auth           on
tls            on
tls_starttls   on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        /var/log/msmtp.log
timeout        10

# SMTP账户信息
account alert
host fusion.mailboxho.st
port 587
from [email protected]
user [email protected]
password YOUR_SMTP_PASSWORD_HERE

# 设为默认账户
account default : alert

进行安全设置(必需)
chmod 600 /etc/msmtprc
chown root:root /etc/msmtprc

测试发送:
echo “msmtp test mail” | msmtp [email protected]

nano /usr/local/bin/ip_monitor.sh

#!/bin/bash

IP="123.123.123.123"
EMAIL="[email protected]"
FAIL_FILE="/tmp/ip_${IP}_fail"
MAX_FAIL=3
SUBJECT="website running stats"

ping -c 2 -W 2 "$IP" >/dev/null 2>&1
RET=$?

if [ $RET -ne 0 ]; then
    FAIL_COUNT=$(cat "$FAIL_FILE" 2>/dev/null || echo 0)
    FAIL_COUNT=$((FAIL_COUNT + 1))
    echo "$FAIL_COUNT" > "$FAIL_FILE"

    if [ "$FAIL_COUNT" -eq "$MAX_FAIL" ]; then
        {
            echo "Subject: $SUBJECT"
            echo
            echo "⚠️ 服务器不可达"
            echo
            echo "IP: $IP"
            echo "时间: $(date)"
        } | msmtp "$EMAIL"
    fi
else
    if [ -f "$FAIL_FILE" ]; then
        {
            echo "Subject: $SUBJECT"
            echo
            echo "✅ 服务器已恢复"
            echo
            echo "IP: $IP"
            echo "时间: $(date)"
        } | msmtp "$EMAIL"

        rm -f "$FAIL_FILE"
    fi
fi

chmod +x /usr/local/bin/ip_monitor.sh

crontab -e

# 以下任意选择一个时点
* * * * /usr/local/bin/ip_monitor.sh #每1分钟运行一次
0 * * * * /usr/local/bin/ip_monitor.sh #每个整点运行一次
30 * * * * /usr/local/bin/ip_monitor.sh #每小时第 30 分钟运行

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注