<< ..

使用Python监控磁盘空间

发布时间:

场景&&问题

我们在线上有一台专门做备份用的机器,磁盘几个T,负责存储每日备份好的数据压缩归档。由于磁盘量足够大,所以也一直没怎么关心磁盘空间的问题。终于在某一天磁盘爆满后,导致7z因为磁盘空间不足而压缩失败。

这种情况肯定不能一直人肉监控,使用Python脚本监控磁盘空间占用率,超出一定界值自动清理一些冗余数据,Emmm…想必是极好的。

主要用到的工具是psutil,调用psutil.disk_usage()可以获得所指定的磁盘空间占用率。

CODE

# coding:utf-8

"""
file name: disk_manager.py
env: python 2.7

Monitor on the target disk
If disk usage out of limit bounds
Execute the cleanup operation
"""

import os
import psutil # pip install psutil

DISK_USAGE_LIMT = 70 # 磁盘使用界限值70%
DIST_DISK       = "/Backups/" # 目标监控磁盘
CLEAN_TEMP_PATH = "/Backups/daily_backup/*.7z" # 清理路径


# 用os.system()去调用unix命令,返回0表示执行成功
def disk_cleaner():
    global CLEAN_TEMP_PATH
    cmd = "ls -al {}".format(CLEAN_TEMP_PATH)
    cmd_flag = os.system(cmd)
    cmd2 = "rm {}".format(CLEAN_TEMP_PATH)
    cmd2_flag = os.system(cmd2)
    print("Cleanup status {} {}".format(cmd_flag, cmd2_flag))


# disk_usage判断是否超出界限值
def monitor_disk():
    global DISK_USAGE_LIMT
    global DIST_DISK
    disk_percent = psutil.disk_usage(DIST_DISK).percent
    if disk_percent > DISK_USAGE_LIMT:
        print("Disk space usage: {}%, processing to cleanup... ".format(disk_percent))
        disk_cleaner()
    else:
        print("Disk space usage: {}%".format(disk_percent))


monitor_disk()

将写好的脚本部署到计划任务中,每天执行一次:

## clean up disk cron job
31 11 * * * /usr/bin/python /home/Scripts/disk_manager.py >> /tmp/disk_manager.log 2>&1