# Create your tests here. import os import time def get_device(path="/mnt/data"): import os day = 7 disk = os.statvfs(path) disk_size = disk.f_bsize * disk.f_blocks / (1024 ** 3) # 1G = 1024M 1M = 1024KB 1KB = 1024bytes print("磁盤總容量: %s" % format(disk_size, '.2f')) disk_used = disk.f_bsize * (disk.f_blocks - disk.f_bfree) / (1024 ** 3) print("磁盤已使用: %s" % format(disk_used, '.2f')) print("磁盤空閒: %s" % format((disk_size - disk_used), '.2f')) disk_used = format((disk_used / float(disk_size)), '.2f') print("磁盤使用率: %s" % disk_used) if float(disk_used) > 0.5: print("磁盤使用率已超過 %s" % disk_used) print("執行清理指令") cmd = 'sudo find /mnt/data/fastdfs/files/snap/ -mtime +%s -type d -name "*"' % day os.system(cmd) else: print("磁盤空間充足,還剩 %s" % (1 - float(disk_used))) class DeviceInfo: """獲取服務器磁盤信息""" def __init__(self, path, day): self.path = path self.day = day self.rate = 0.75 @staticmethod def get_disk_info(path): """獲取磁盤掛載信息""" return os.statvfs(path) def get_disk_size(self): """獲取磁盤總容量""" disk = self.get_disk_info(self.path) disk_size = disk.f_bsize * disk.f_blocks / (1024 ** 3) # 1G = 1024M 1M = 1024KB 1KB = 1024bytes print("磁盤總容量: %s" % format(disk_size, '.2f')) return disk_size def get_disk_used(self): """獲取磁盤已使用容量|磁盤空閒容量""" disk = self.get_disk_info(self.path) disk_size = self.get_disk_size() disk_used = disk.f_bsize * (disk.f_blocks - disk.f_bfree) / (1024 ** 3) print("磁盤已使用: %s" % format(disk_used, '.2f')) print("磁盤空閒: %s" % format((disk_size - disk_used), '.2f')) return disk_size, disk_used, disk_size - disk_used def get_disk_rate(self): """返回磁盤使用率|剩餘率""" disk_size, disk_used, _ = self.get_disk_used() print("磁盤使用率: %s" % format((disk_used / disk_size), '.2f')) print("磁盤空閒率: %s" % format((1 - (disk_used / disk_size)), '.2f')) return disk_used / disk_size, 1 - (disk_used / disk_size) def check(self): """磁盤清理主進程""" disk_rate, _ = self.get_disk_rate() # 磁盤使用率 if disk_rate > self.rate: # 磁盤使用率大於默認配置(0.75) clear_cmd = 'sudo find /mnt/data/files/snap/ -mtime +%d -type d -name "*" -exec rm -rf {} \\' while self.day: cmd = clear_cmd % self.day print(cmd) # os.system(cmd) disk_rate, _ = self.get_disk_rate() # 磁盤使用率 if disk_rate < self.rate: # 使用率小於默認配置,break break else: print('已超標') if __name__ == '__main__': device = DeviceInfo(path='/Users/zhangjianping', day=7) device.check()