python编写liunx服务器登陆自动巡检脚本

前言:

用户需要一份用Python编写的Linux系统巡检脚本,检查内存、磁盘、CPU使用率,还有网络连通性。
首先,我得确定用户的使用场景。可能用户是系统管理员,需要定期监控服务器状态,确保系统正常运行。
或者是开发人员,想自动化巡检流程,减少手动检查的工作量。
接下来,用户提到的具体指标有内存、磁盘、CPU和网络。
我需要考虑如何用Python获取这些信息。
对于Linux系统,通常可以通过读取/proc文件系统或者使用命令行工具来获取这些数据。
比如,内存信息可以从/proc/meminfo读取,磁盘使用情况可以用psutil库或者调用df命令,
CPU使用率可以用psutil或者读取/proc/stat,网络连通性可以用ping命令或者socket库。
然后,用户可能希望脚本的输出清晰易读,可能需要格式化输出,比如用表格形式展示结果。
颜色区分不同状态,比如红色表示警告,绿色表示正常,这样用户一眼就能看出问题所在。
还要考虑是否需要参数化,比如允许用户指定检查的磁盘路径或IP地址,但用户没有提到,可能基础版本不需要,但可以预留扩展的可能性。
另外,日志记录功能可能有用,方便后续查看历史巡检结果。
需要处理权限问题,比如某些命令可能需要sudo权限,但用户可能希望脚本在普通用户权限下运行,所以应选择不需要特权的方法。
例如,使用psutil库可以跨平台,并且不需要执行外部命令,更安全可靠。 关于网络检查,用户可能想检测内网关键服务或外网连通性。
比如,默认检查8.8.8.8和百度,但用户可能需要自定义,所以可以设计成可配置的列表。
最后,确保代码兼容Python3,并且添加必要的异常处理,避免脚本因为某个检查项失败而终止。
例如,捕获异常并记录错误信息,继续执行其他检查。

总结下来,脚本需要:

  1. 使用psutil库获取系统信息(内存、磁盘、CPU)。
  2. 使用subprocess执行ping命令检查网络。
  3. 格式化输出,用颜色标记状态。
  4. 可配置的检查项,如磁盘路径、IP列表。
  5. 添加日志记录功能。
  6. 异常处理,确保健壮性。 现在开始编写代码,确保各部分功能正确,
    并测试在不同情况下的表现,比如磁盘空间不足时是否正确报警,网络不通时的处理等。
    同时,提供使用说明,指导用户安装依赖(如psutil)和如何运行脚本。

以下是一个基于Python 3的Linux系统巡检脚本,使用psutil库获取系统信息,包含您要求的五大核心指标检测:

#!/usr/bin/env python3
import psutil
import subprocess
import platform
from datetime import datetime
import socket
import sys


# 颜色配置
COLORS = {
   
    "red": "\033[91m",
    "green": "\033[92m",
    "yellow": "\033[93m",
    "orange": "\033[38;5;208m",
    "end": "\033[0m"
}


def check_uptime():
    """获取系统运行时间和启动时间"""
    boot_time = psutil.boot_time()
    now = datetime.now().timestamp()
    
    # 计算运行时间
    uptime_seconds = now - boot_time
    days, remainder = divmod(uptime_seconds, 86400)
    hours, remainder = divmod(remainder, 3600)
    minutes, seconds = divmod(remainder, 60)
    
    return {
   
        "days": int(days),
        "hours": int(hours),
        "minutes": int(minutes),
        "seconds": int(seconds),
        "boot_time": datetime.fromtimestamp(boot_time).strftime("%Y-%m-%d %H:%M:%S")
    }

def get_host_ip():
    """获取主机所有IPv4地址(排除回环地址)"""
    interfaces = psutil.net_if_addrs()
    ips = []
    
    for name, addrs in interfaces.items():
        for addr in addrs:
            if addr.family == socket.AF_INET and not addr.address.startswith('127.'):
                ips.append({
   
                    "interface": name,
                    "ip": addr.address,
                    "netmask": addr.netmask
                })
    
    return {
   "ips": ips}


def check_memory():
    """检查内存使用率(修改为GB单位)"""
    mem = psutil.virtual_memory()
    return {
   
        "total": round(mem.total / (1024**3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值