Python 定时巡检:给个人 Linux 服务器做一个磁盘与日志健康检查脚本

举报
yd_221866279 发表于 2026/11/09 16:37:30 2026/11/09
【摘要】 很多个人服务器出问题都不是突然发生的,而是磁盘慢慢写满、日志悄悄膨胀,最后服务起不来才被发现。与其每天手动登录检查,不如写一个十几行的小脚本,让它每天定时巡检一次,把结果写进日志,超过阈值再提醒自己。本文用 Python 标准库实现,不依赖第三方包,适合刚接触 Linux 运维的初学者。 一、先想清楚要查什么巡检不必面面俱到,先抓住三类最容易出事的指标:磁盘剩余空间、关键目录的大小、系统日志...

很多个人服务器出问题都不是突然发生的,而是磁盘慢慢写满、日志悄悄膨胀,最后服务起不来才被发现。与其每天手动登录检查,不如写一个十几行的小脚本,让它每天定时巡检一次,把结果写进日志,超过阈值再提醒自己。本文用 Python 标准库实现,不依赖第三方包,适合刚接触 Linux 运维的初学者。

一、先想清楚要查什么

巡检不必面面俱到,先抓住三类最容易出事的指标:磁盘剩余空间、关键目录的大小、系统日志里最近的错误。磁盘满了会影响数据库写入和应用启动;某个日志目录几天涨几 GB,往往是程序在循环报错;日志里的 error 激增,则说明服务已经不健康。把这三件事做成一个固定动作,比装一堆监控工具更适合个人项目起步。

二、核心脚本:不到 40 行

新建文件 check_server.py,思路是先用 shutil.disk_usage 读取根分区,再遍历几个重点目录统计大小,最后扫描日志文件:

import shutil, datetime
from pathlib import Path

def check_disk(path="/"):
    total, used, free = shutil.disk_usage(path)
    rate = used / total * 100
    print(f"{datetime.datetime.now()} 磁盘使用率: {rate:.1f}% 剩余 {free // 1024 // 1024} MB")
    return rate

def check_dir(path, limit_mb=500):
    size = sum(p.stat().st_size for p in Path(path).rglob("*") if p.is_file())
    print(f"目录 {path}: {size // 1024 // 1024} MB")
    return size // 1024 // 1024 > limit_mb

if __name__ == "__main__":
    rate = check_disk("/")
    big = check_dir("/var/log")
    if rate > 85 or big:
        print("警告: 磁盘或日志目录需要清理")
    else:
        print("巡检通过")

这里把告警阈值写成 85%,把重点目录阈值写成 500MB,都是可以按自己服务器的实际情况调整的数字。脚本只做检查和输出,不自动删除任何文件,这是新手最应该坚持的原则:先看清楚,再动手清理。

三、让它每天自动跑起来

Linux 自带的 cron 很适合做这件事。执行 crontab -e,加入一行,每天早上八点运行,并把输出追加到巡检日志:

0 8 * * * /usr/bin/python3 /home/user/check_server.py >> /home/user/check.log 2>&1

第一次配置后,建议先手动运行一次 python3 check_server.py,确认没有报错,再等第二天看 check.log 里是否多了一行记录。如果 cron 没有生效,多数是 Python 路径不对,或者脚本没有执行权限,改成绝对路径、加上 chmod +x 就能解决。

四、日志别让它自己长大

巡检日志本身也会增长,所以要顺手做日志轮转。可以在脚本里只保留最近七天的记录,或者用系统自带的 logrotate。更简单的做法是每周看一次 check.log,顺手删掉过期的备份文件。很多磁盘满的事故,根源就是没人管日志,自动巡检加定期清理,才能形成闭环。

五、三个容易踩的坑

第一,不要在脚本里写 rm -rf 这类破坏性命令,自动删除的风险远大于收益。第二,目录统计时遇到权限不足的文件会报错,实际使用时可以加上 try 捕获,或者只检查自己有权限的目录。第三,阈值不要设得太低,70% 就告警会让人麻木,85% 到 90% 之间比较合适,留出处理时间。

六、小结

一个定时巡检脚本的价值不在于代码多复杂,而在于把“想起来才检查”变成“每天固定检查”。先从磁盘和日志这两件事做起,跑通 cron 和日志记录,再慢慢加上内存、进程和端口检查。等你熟悉这套流程后,再去学 Prometheus 或云监控,会发现很多概念都已经在小脚本里遇到过了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。