家用住宅主机Linux脚本监控服务器告警

很多朋友在家用住宅主机上跑着网站、NAS、下载机或开发环境,但服务器出问题(比如内存溢出、磁盘满了、进程挂掉)往往不能及时发现。
本文从零开始,教你编写一个 Linux 监控脚本,定时检测核心指标并自动推送告警,让你在手机上就能第一时间收到异常通知。

准备工作:一台普通 Linux 主机就够了

家用住宅主机通常是 Debian、Ubuntu 或 CentOS 系统。
你需要:

  • 能通过 SSH 登录(或者直接接显示器操作)
  • 拥有 sudo 或 root 权限
  • 网络连通(用于发送告警消息)
  • 如果使用邮件告警,安装 mailutils;如果使用钉钉/企业微信机器人,有对应的 Webhook URL。本文以钉钉机器人为例,无需安装额外软件。

编写监控脚本:检测 CPU、内存、磁盘和进程

/home/yourname/ 下新建文件 monitor.sh,粘贴以下内容:

#!/bin/bash
# 监控脚本 - 检测资源使用率,超过阈值则告警

# === 配置区域(根据你的情况修改) ===
CPU_THRESHOLD=90        # CPU 使用率百分比阈值
MEM_THRESHOLD=90        # 内存使用率百分比阈值
DISK_THRESHOLD=90       # 磁盘使用率百分比阈值
CHECK_PROCESS="nginx"   # 要检测的关键进程名,多个用空格隔开
ALARM_URL="https://oapi.dingtalk.com/robot/send?access_token=你的TOKEN"
# ================================

# 获取当前状态
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d. -f1)
MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}' | cut -d. -f1)
DISK_USAGE=$(df / | tail -1 | awk '{print $5}' | tr -d '%')

ALARM_MSG=""

if [ "$CPU_USAGE" -gt "$CPU_THRESHOLD" ]; then
    ALARM_MSG+="CPU 使用率 ${CPU_USAGE}%(阈值 ${CPU_THRESHOLD}%)\\n"
fi

if [ "$MEM_USAGE" -gt "$MEM_THRESHOLD" ]; then
    ALARM_MSG+="内存使用率 ${MEM_USAGE}%(阈值 ${MEM_THRESHOLD}%)\\n"
fi

if [ "$DISK_USAGE" -gt "$DISK_THRESHOLD" ]; then
    ALARM_MSG+="磁盘使用率 ${DISK_USAGE}%(阈值 ${DISK_THRESHOLD}%)\\n"
fi

# 检测指定进程是否存在
for proc in $CHECK_PROCESS; do
    if ! pgrep -x "$proc" > /dev/null 2>&1; then
        ALARM_MSG+="进程 ${proc} 未运行\\n"
    fi
done

# 如果有异常,发送告警
if [ -n "$ALARM_MSG" ]; then
    MESSAGE="【家用服务器告警】主机 $(hostname) 异常:\\n${ALARM_MSG}"
    curl -s -H "Content-Type: application/json" -X POST -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$MESSAGE\"}}" "$ALARM_URL"
fi

保存后赋予执行权限:

chmod +x /home/yourname/monitor.sh

设置定时任务:让脚本自动运行

使用 crontab 添加计划任务,比如每 5 分钟检查一次:

crontab -e

在文件末尾添加一行:

*/5 * * * * /home/yourname/monitor.sh

保存退出。
crontab 会自动加载。
可以运行 crontab -l 查看是否添加成功。

避坑指南:常见报错与处理方法

1. top 命令未安装
部分最小化安装的系统没有 top,运行 apt install procps(Debian/Ubuntu)或 yum install procps-ng(CentOS)。

2. pgrep 找不到进程
确认进程名正确,可以用 ps aux | grep nginx 查看实际名称。如果进程名带路径或参数,建议使用 pgrep -f 替换 -x 做模糊匹配。

3. curl 命令缺失
先安装 curl:apt install curlyum install curl

4. 钉钉 Webhook 地址错误
检查 token 是否完整,不要有空格。建议先在命令行手动 curl 测试。

5. 脚本变量获取空值
可能因为语言环境问题,top -bn1 输出格式不一致。可以在脚本第一行加入 export LANG=en_US.UTF-8

验证监控脚本是否生效

手动模拟告警

降低阈值临时测试,例如将 CPU_THRESHOLD 改为 1,然后执行脚本:

bash /home/yourname/monitor.sh

此时如果 CPU 使用率超过 1%(几乎必然),你的钉钉机器人应该能收到一条告警消息。

查看定时任务执行日志

在 crontab 中建议重定向输出到日志文件以便排查:

*/5 * * * * /home/yourname/monitor.sh >> /tmp/monitor.log 2>&1

然后查看 /tmp/monitor.log 是否有错误输出。

高频问题解答

Q:我不想用钉钉,可以用邮件吗?
可以。将告警部分的 curl 替换为 echo "$MESSAGE" | mail -s "服务器告警" your@email.com,前提是系统已配置好邮件发送服务(如 Postfix 或 msmtp)。

Q:监控多个磁盘怎么办?
修改 DISK_USAGE 部分,使用 df -h 循环每个挂载点,参考 df | grep '^/dev' 遍历。

Q:如何监控网络连通性?
在脚本中加入 ping -c 2 baidu.com &>/dev/null || ALARM_MSG+="网络不可达"

Q:脚本执行有权限问题?
确保脚本所有者与定时任务执行用户一致,或使用绝对路径。不要放在 /tmp 等可能被清理的目录。

这套方案完全免费、零依赖(除 curl 外),适合大多数家用住宅主机。
你可以根据自己的需求扩展监控项(温度、端口、服务状态等),让家用服务器运行更安心。
如果遇到其他问题,欢迎对照避坑部分逐项检查。

分享到:
上一篇
外贸站宝塔面板定时自动清理网站缓存
下一篇
跨境独立站多站点统一SSL证书批量配置
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意