import subprocess
import time
import schedule
import datetime
import smtplib
from email.mime.text import MIMEText
# 获取阵列情况
def get_array_status():
# 执行 megacli 命令获取阵列状态
# centos中获取阵列命令
cmd = 'megacli -LDInfo -LALL -aALL|grep -A 5 "Primary-5, Secondary-0, RAID Level Qualifier-3"'
output = subprocess.check_output(cmd, shell=True, encoding='utf-8')
lines = output.splitlines()
data_raid = []
for data in lines:
print(data)
if 'Primary-5, Secondary-0, RAID Level Qualifier-3' in data:
data_raid.append("正在检测此系统radi情况")
elif 'State' in data:
if 'Optimal' in data:
data_raid.append("raid5状态正常")
else:
data1 = "故障"
write(data1)
elim()
break
elif 'Number Of Drives' in data:
if '11' in data:
data_raid.append("正常的磁盘数为:" + '11')
write(data_raid)
else:
data1 = "故障"
write(data1)
elim()
break
# 发送异常邮件
def elim():
# 设置发件人和收件人
# qq邮箱,发件邮箱
sender = '**********@qq.com'
recipient = '***************@*******.com'
# 飞书邮箱
# 设置邮件内容
subject = '阵列告警'
message = '现在检测到阵列异常,需要检测192.168.6.6的阵列'
msg = MIMEText(message, 'plain', 'utf-8')
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = recipient
# 设置 QQ 邮箱的 SMTP 服务器地址和端口号
smtp_server = 'smtp.qq.com'
smtp_port = 587
# 设置发件人邮箱的登录凭据
username = '****************@qq.com'
# 需要在qq邮箱网页版中获取授权码
password = '*************'
try:
# 创建SMTP客户端对象
smtp_obj = smtplib.SMTP(smtp_server, smtp_port)
# 开启安全连接
smtp_obj.starttls()
# 登录邮箱
smtp_obj.login(username, password)
# 发送邮件
smtp_obj.sendmail(sender, recipient, msg.as_string())
print('邮件发送成功!')
except Exception as e:
print('邮件发送失败:', str(e))
finally:
# 关闭连接
smtp_obj.quit()
# 脚本输入数据写入到日志文件中
def write(data):
data = '\n'.join(data)
current_time = datetime.datetime.now()
formatted_time = current_time.strftime("%Y-%m-%d %H:%M")
path = '/root/raid/raid.log'
minio_data = formatted_time + '\n' + '------------->' + '\n' + data
with open(path, 'a') as file:
file.write(minio_data + '\n')
print("数据写入成功")
schedule.every().hour.do(get_array_status)
while True:
schedule.run_pending()
获取centos的raid阵列监控,与python的计划任务
于 2023-08-18 16:51:13 首次发布