利用Python实现监控服务器存活状态的脚本,以及在服务器状态异常时发送邮件通知。

目录

一.前言

二.脚本中使用的库的介绍 

2.1subprocess

2.2smtplib

2.3email

三.代码实现及解析 

3.1导入必要的模块

3.2配置邮件参数

3.3定义发送邮件函数

3.4执行系统命令并检查输出

3.5主程序逻辑 

四.致谢


一.前言
 

在当今的数字化时代,服务器的稳定性和可靠性对于保障业务连续性至关重要。服务器监控作为预防性措施,能够帮助我们及时发现并解决潜在问题,避免服务中断。自动化监控系统不仅可以提高响应速度,还能减少人为疏漏,确保服务器环境的持续健康。



二.脚本中使用的库的介绍 
 

2.1subprocess


subprocess 模块用于在Python中执行外部命令,例如执行系统命令、调用其他可执行程序等。在运维脚本中,经常需要执行诸如操作系统命令、系统工具或者其他程序的任务。

 

2.2smtplib

smtplib 模块是Python的标准库之一,用于发送邮件。在运维脚本中,通常会用到这个模块来发送报警邮件、通知邮件等。



2.3email

email 模块是Python标准库,用于处理电子邮件相关的数据结构和协议。在此脚本中,主要用来构建和处理邮件内容
 


三.代码实现及解析 

import subprocess
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import time

# 设置邮件发送相关信息
smtp_server = 'smtp.example.com'
smtp_port = 587
smtp_user = 'your_email@example.com'
smtp_password = 'your_email_password'
sender_email = 'your_email@example.com'
receiver_email = 'recipient@example.com'

def send_email(subject, body):
    msg = MIMEMultipart()
    msg['From'] = sender_email
    msg['To'] = receiver_email
    msg['Subject'] = subject

    msg.attach(MIMEText(body, 'plain'))

    # 登录SMTP服务器并发送邮件
    with smtplib.SMTP(smtp_server, smtp_port) as server:
        server.starttls()
        server.login(smtp_user, smtp_password)
        server.send_message(msg)

def check_server(hostname):
    result = subprocess.run(['ping', '-c', '1', hostname], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    if result.returncode == 0:
        return True
    else:
        return False

if __name__ == "__main__":
    server_to_monitor = 'example.com'
    while True:
        if not check_server(server_to_monitor):
            print(f"Server {server_to_monitor} is down. Sending notification...")
            subject = f"Server {server_to_monitor} is down!"
            body = f"Server {server_to_monitor} is not responding to ping requests."
            send_email(subject, body)
        else:
            print(f"Server {server_to_monitor} is up.")
        time.sleep(300)  # 每5分钟检查一次

3.1导入必要的模块

 

import subprocess
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
  • subprocess: 用于执行系统命令。
  • smtplib: 用于连接到SMTP服务器发送邮件。
  • email.mime.text: 用于创建邮件正文。
  • email.mime.multipart: 用于创建包含多个部分的邮件,如文本和附件。

     

3.2配置邮件参数

 

SMTP_SERVER = 'smtp.example.com'  # SMTP服务器地址
SMTP_PORT = 587  # SMTP服务器端口号
SENDER_EMAIL = 'your_email@example.com'  # 发件人邮箱地址
SENDER_PASSWORD = 'your_password'  # 发件人邮箱密码
RECIPIENT_EMAIL = 'recipient@example.com'  # 收件人邮箱地址

这些变量定义了SMTP服务器的地址和端口号,以及发件人和收件人的邮箱地址和凭据。

 

3.3定义发送邮件函数


 

def send_email(subject, body):
    message = MIMEMultipart()
    message['From'] = SENDER_EMAIL
    message['To'] = RECIPIENT_EMAIL
    message['Subject'] = subject
    message.attach(MIMEText(body, 'plain'))
    
    try:
        with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
            server.starttls()
            server.login(SENDER_EMAIL, SENDER_PASSWORD)
            server.send_message(message)
        print('Email sent successfully!')
    except Exception as e:
        print(f'Failed to send email. Error: {e}')
  • send_email 函数通过SMTP连接发送邮件。它使用 MIMEMultipart 和 MIMEText 创建邮件对象,并附加主题、发件人、收件人以及邮件正文。
  • 使用 smtplib.SMTP 连接到SMTP服务器,启用安全传输层(TLS),登录发件人邮箱,并使用 server.send_message 发送邮件。





     

3.4执行系统命令并检查输出
 

def execute_command(command):
    try:
        result = subprocess.run(command, capture_output=True, text=True)
        return result.stdout
    except Exception as e:
        return f'Error executing command: {e}'

  • execute_command 函数接受一个命令字符串作为参数,使用 subprocess.run 执行该命令。
  • capture_output=True 表示捕获命令的标准输出。
  • text=True 表示命令的输出以文本形式返回。





     

3.5主程序逻辑 


 

if __name__ == "__main__":
    command_to_execute = 'your_system_command_here'
    command_output = execute_command(command_to_execute)
    
    email_subject = 'Command Execution Report'
    email_body = f'The command "{command_to_execute}" executed successfully.\n\nOutput:\n{command_output}'
    
    send_email(email_subject, email_body)

  • 在 if __name__ == "__main__": 块中,定义要执行的系统命令字符串,并调用 execute_command 函数获取命令执行结果。
  • 创建邮件主题和正文,包含命令执行的结果。
  • 调用 send_email 函数发送包含执行结果的邮件。

四.致谢

非常感谢您阅读我的博客!如果您有任何问题、建议或想了解特定主题,请随时告诉我。您的反馈对我非常重要,我将继续努力提供高质量的内容。

如果您喜欢我的博客,请考虑订阅我们的更新,这样您就不会错过任何新的文章和信息。同时,欢迎您分享我们的博客给更多的朋友和同事,让更多人受益。

再次感谢您的支持和关注!如果您有任何想法或需求,请随时与我们联系。祝您生活愉快,学习进步!


 

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值