Python利用subprocess模块检查磁盘空间
当磁盘/目录大于80%时,执行命令,并用钉钉发送
- 实例脚本:
import os
import socket
import subprocess
#声明钉钉机器人
from ddrobot import *
def run_cmd(cmd):
process = subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
result_f,error_f = process.stdout,process.stderr
errors = error_f.read()
if errors:
pass
result = result_f.read().decode()
if result_f:
result_f.close()
if error_f:
error_f.close()
return result
def disk_check():
subject = ''
result = run_cmd(cmd1)
content = cmd1 + '\n' + result
result = result.split('\n')
#print(result)
for line in result:
if 'G ' in line or 'M ' in line:
line = line.split()
for i in line:
if '%' in i and int(i.strip('%')) > 80:
subject = 'gitlab-runer [WARNING] SERVER FILESYSTEM USE% OVER ' + i + ', PLEASE CHECK!'
#当磁盘空间大于80%时,执行cmd2命令
result1 = run_cmd(cmd2)
result2 = run_cmd(cmd3)
#content = cmd2 + '\n' + result1
#result1 = result1.split('\n')
#print(result1)
#print(result)
if subject:
# send_mail(receiver,subject,content)
# print('email sended')
#利用钉钉机器人模块
drobot.dingmessage(subject)
else:
print('Everything is ok, keep on monitor.')
if __name__ == '__main__':
cmd1 = 'df -h| grep -w "/"|grep -v "aliyun"'
cmd2 = 'echo "y" | docker system prune -a'
cmd3 = 'docker volume rm $(docker volume ls -qf dangling=true)'
disk_check()
此方法暂时不用,改为docker volume rm $(docker volume ls -qf dangling=true)
shell rm_disk.sh 脚本
#!/usr/bin/env bash
DIR=/var/lib/docker/overlay2
DIR1=/var/lib/docker/volumes
#查找当前docker正在运行的容器挂载的目录,并利用tr将换行符替换为"|",并用sed将最后一个字符("|")去掉
DF=`df -h | grep overlay | awk '{print $NF}' | awk -F \/ '{print $6}'| tr "\n" "|"| sed 's/.$//'`
DB=metadata.db
#删除overlay2时,要谨慎
#cd $DIR
##利用(sed "s#^#$(pwd)/#")显示文件全路径
#for line in `ls $DIR|grep -Ev "$DF" | sed "s#^#$(pwd)/#"`
#do
# rm -rf $line
#done
cd $DIR1
for line1 in `ls $DIR1 | grep -Ev "$DF"|grep -v "$DB" | sed "s#^#$(pwd)/#"`
do
rm -rf $line1
done