1. 分析请求:

* 角色:专业IT/运维/渠道领域技术作者。

* 当前年份:2026年(严格执行:标题和正文中所有年份必须使用2026,严禁使用2024/2023等旧年份)。

* 标题规则:禁止出现第X期编号(例如,不允许使用“第5期”)。必须使用具体日期或描述性标题。

* 字数:800字以上。

* 格式:Markdown格式,从##二级标题开始。

* 主题:运维自动化脚本分享(提供实用的Shell/Python脚本)。

  1. 确定角度与结构:

标题:*需要具有描述性且专业,并包含2026年。例如:2026年运维自动化实战:高效Shell与Python脚本分享

引言:*设定背景。2026年的IT运维要求高效率、零信任和自动化。提及从手动繁杂工作向自动化流水线的转变。

脚本1:Shell - 服务器健康检查与自动清理。*一个经典的运维任务,但针对2026年进行了更新(例如,检查Docker/K8s日志,而不仅仅是标准的/var/log)。

脚本2:Python - SSL证书过期监控与告警。*对安全性和连续性至关重要。使用标准的Python库(sslsocketsmtp)。

脚本3:Shell/Python - 批量服务器资产管理更新。*将硬件/操作系统信息收集到CSV/JSON中。

结语:*强调自动化是一个持续演进的过程,提及2026年AIOps等趋势,但重申基础脚本的价值。

  1. 起草内容 - 逐步进行:

* 标题:## 2026年运维自动化实战:提升效率的Shell与Python脚本分享(符合规则:以##开头,包含2026,无期号,具描述性)。

* 引言:在2026年,云原生架构和微服务已成为标准。SRE和运维团队面临着比以往更复杂的拓扑。手动干预是停机的主要根源。自动化脚本仍然是AIOps和ChatOps的基石。今天,我将分享几个实用的脚本。

* 脚本1:Shell - 智能磁盘与日志清理脚本

背景:*在2026年,日志量依然庞大(容器日志、K8s事件)。

代码:*编写一个检查磁盘使用率的bash脚本。如果超过阈值,则清理旧的Docker容器日志和轮转的系统日志。

解释:*详细说明变量、阈值和安全措施。

* 脚本2:Python - 多域名SSL证书过期巡检与告警

背景:*2026年零信任安全要求严格的证书管理。Let's Encrypt很好,但自定义域名或内部微服务仍然需要监控。

代码:*使用sslsocketdatetime。连接到主机,提取证书,计算剩余天数。如果小于阈值,则打印告警(或发送邮件/钉钉)。

解释:*讨论可扩展性(添加到列表中)以及与2026年现代告警平台(如飞书/钉钉Webhook,尽管为了保持简单,仅打印告警逻辑)的集成。

* 脚本3:Shell - K8s集群节点状态批量巡检

背景:*Kubernetes是2026年的默认编排器。检查节点状态(NotReady、内存压力)是日常任务。

代码:*使用kubectl获取节点,过滤NotReady,提取异常节点,发送告警。

解释:*强调在2026年将K8s工具集成到Shell脚本中如何成为必备技能。

* 脚本4:Python - 资产信息自动采集与API上报

背景:*CMDB集成。不再有手动Excel表格。

代码:*使用platformpsutil(或基本的subprocess)收集CPU、内存、操作系统。使用requests将其打包为JSON并POST到API。

解释:*讨论2026年IT资产管理中的自动化数据流转。

* 结语:总结。在2026年,尽管AI正在接管预测性运维,但确定性脚本仍然是执行层。鼓励读者将这些脚本适配到他们的环境中。

  1. 审查与润色(针对约束条件的自我纠正):

年份检查:*搜索2024、2023。确保只使用2026。(例如,将“近年来”改为“2026年”,将“今年”改为“2026年”)。

标题检查:*标题中无期号。使用## 2026年运维自动化实战:提升效率的Shell与Python脚本分享。通过。

格式:*以##开头。通过。

字数:*需要确保足够详细。扩展Python脚本中的解释和注释。添加安全警告。

角色:*专业语调。使用“SRE”、“云原生”、“CMDB”、“零信任”等术语。

  1. 最终打磨(模拟生成):

* 撰写实际的Markdown文本。

* 确保代码块已正确格式化。

* 检查流畅度与可读性。

字数检查:*引言(约150字)+ 脚本1(约200字)+ 脚本2(约250字)+ 脚本3(约200字)+ 结语(约100字)= 约900字。轻松超过800字限制。

  1. 输出生成(继续根据上述步骤生成中文回复)。## 2026年运维自动化实战:提升效率的Shell与Python脚本分享

进入2026年,随着云原生架构与混合云环境的全面普及,运维团队所面临的管理复杂度呈指数级上升。微服务节点动辄成百上千,传统的手动敲命令、单点排查模式早已无法满足现代IT对高可用与敏捷交付的要求。在AIOps尚未完全替代确定性执行的今天,熟练运用Shell与Python编写自动化脚本,依然是SRE和运维工程师的“看家本领”。

本文将结合2026年主流的运维场景,分享三个高度实用的自动化脚本,涵盖日志清理、证书巡检与K8s集群节点监控,帮助大家从繁琐的重复劳动中解放出来。

一、 Shell脚本:智能磁盘与容器日志清理

在2026年,容器化部署已成为绝对主流,但容器日志无限增长导致的磁盘空间耗尽(No Space Left on Device)依然是运维事故的常客。以下脚本通过智能检测磁盘使用率,自动清理过期日志与无用的容器镜像,保障节点健康。


#!/bin/bash
# 2026年智能磁盘与容器日志清理脚本
# 阈值设置
DISK_USAGE_THRESHOLD=80
LOG_DIR="/var/log"
CONTAINER_LOG_DIR="/var/lib/docker/containers"

# 获取当前根分区磁盘使用率
DISK_USAGE=$(df -h / | awk 'NR==2 {print $1}' | sed 's/%//g')

echo "[$(date '+%Y-%m-%d %H:%M:%S')] 当前根分区使用率: ${DISK_USAGE}%"

if [ "$DISK_USAGE" -ge "$DISK_USAGE_THRESHOLD" ]; then
    echo "警告:磁盘使用率超过 ${DISK_USAGE_THRESHOLD}%,开始执行清理..."
    
    # 1. 清理7天前的系统日志
    echo "正在清理旧系统日志..."
    find $LOG_DIR -name "*.log" -mtime +7 -type f -exec truncate -s 0 {} \;
    
    # 2. 截断超过100M的容器日志
    echo "正在清理过大的容器日志..."
    find $CONTAINER_LOG_DIR -name "*-json.log" -size +100M -type f -exec truncate -s 0 {} \;
    
    # 3. 清理无用的Docker镜像(悬空镜像)
    echo "正在清理无用的容器镜像..."
    docker image prune -af --filter "until=48h"
    
    # 4. 2026年常见操作:清理僵尸容器
    docker container prune -f
    
    echo "清理完成。当前磁盘使用率:$(df -h / | awk 'NR==2 {print $1}')"
else
    echo "磁盘使用率正常,无需清理。"
fi

运维建议:建议将该脚本配置到系统的Cron中,每天凌晨低峰期执行一次。同时,在2026年的容器运行时(如containerd/docker)配置中,强烈建议开启日志轮转(Log-Rotation)限制,从源头阻断单日志文件过大的问题。

二、 Python脚本:多域名SSL证书过期巡检与告警

2026年,零信任网络架构对HTTPS的依赖更深,SSL证书的过期可能导致严重的业务中断。虽然Let's Encrypt普及了短效证书,但企业内部微服务网关与第三方API仍大量使用年签证书。以下Python脚本可批量巡检证书有效期,并对接飞书/钉钉机器人告警。


#!/usr/bin/env python3
# 2026年SSL证书过期巡检脚本
import ssl
import socket
from datetime import datetime, timedelta
import requests

# 配置参数
DOMAINS = ["api.yourcompany.com", "gateway.internal.cn", "ops-portal.vip"]
WARN_DAYS = 30  # 提前30天告警
WEBHOOK_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/your-2026-token"

def check_ssl_expiry(domain, port=443):
    context = ssl.create_default_context()
    conn = context.wrap_socket(socket.socket(), server_hostname=domain)
    conn.settimeout(5.0)
    
    try:
        conn.connect((domain, port))
        ssl_info = conn.getpeercert()
        # 解析证书过期时间
        expire_date = datetime.strptime(ssl_info['notAfter'], '%b %d %H:%M:%S %Y %Z')
        return expire_date
    except Exception as e:
        return None
    finally:
        conn.close()

def send_alert(domain, days_left):
    msg = f"⚠️ SSL证书告警\n域名: {domain}\n剩余天数: {days_left}天\n请尽快更新证书,避免业务中断!"
    payload = {"msg_type": "text", "content": {"text": msg}}
    try:
        requests.post(WEBHOOK_URL, json=payload, timeout=5)
    except Exception as e:
        print(f"告警发送失败: {e}")

if __name__ == "__main__":
    print(f"--- 2026年SSL证书巡检开始 {datetime.now()} ---")
    for domain in DOMAINS:
        expire_date = check_ssl_expiry(domain)
        if expire_date:
            days_left = (expire_date - datetime.now()).days
            if days_left <= WARN_DAYS:
                print(f"[CRITICAL] {domain} 证书将在 {days_left} 天后过期!")
                send_alert(domain, days_left)
            else:
                print(f"[OK] {domain} 证书剩余 {days_left} 天。")
        else:
            print(f"[ERROR] 无法获取 {domain} 的证书信息。")

三、 Shell脚本:K8s集群节点异常状态自动摘除与恢复

在K8s环境中,节点NotReady状态若不及时处理,会导致Pod调度失败。此脚本通过kubectl监控节点状态,一旦发现节点异常,自动将其标记为不可调度(Cordon)并驱逐Pod,待节点恢复后自动解除隔离。


#!/bin/bash
# 2026年K8s节点状态监控与自动恢复脚本

# 获取所有NotReady的节点
NOT_READY_NODES=$(kubectl get nodes | grep -v "Ready" | grep -v "STATUS" | awk '{print $1}')

for NODE in $NOT_READY_NODES; do
    echo "[$(date)] 发现异常节点: $NODE"
    
    # 检查是否已经被标记为不可调度
    IS_CORDONED=$(kubectl describe node $NODE | grep "Taints" | grep -c "node.kubernetes.io/unschedulable")
    
    if [ "$IS_CORDONED" -eq 0 ]; then
        echo "正在隔离节点 $NODE 并驱逐Pod..."
        kubectl cordon $NODE
        kubectl drain $NODE --ignore-daemonsets --delete-emptydir-data --force --timeout=60s
        # 此处可接入2026年自愈平台API触发节点重启或硬件报修
    fi
done

# 检查已恢复的节点,自动解除隔离
READY_NODES=$(kubectl get nodes | grep " Ready" | awk '{print $1}')
for NODE in $READY_NODES; do
    IS_CORDONED=$(kubectl describe node $NODE | grep "Taints" | grep -c "node.kubernetes.io/unschedulable")
    if [ "$IS_CORDONED" -gt 0 ]; then
        echo "节点 $NODE 已恢复,正在解除隔离..."
        kubectl uncordon $NODE
    fi
done

结语

在2026年的运维体系中,自动化不仅是提升效率的工具,更是保障业务连续性的基石。上述脚本虽不能完全替代如ArgoCD或Terraform等重型自动化框架,但它们在处理边缘场景、快速止血与日常巡检中,依然发挥着不可替代的“轻骑兵”作用。建议运维人员在实际使用时,结合自身业务架构