做运维这么多年,最深的感受就是:日常工作里80%的时间,都耗在了重复且无技术含量的操作上——每天逐台检查ECS状态、手动清理日志、批量重启服务,忙到没时间做核心优化。分享3个自己日常高频使用的自动化脚本,适配阿里云ECS、云服务器等常用环境,复制就能用,帮大家解放双手,把时间花在更有价值的事情上。
所有脚本均经过实际生产环境验证,轻量化不占资源,新手也能快速上手,无需复杂配置,重点解决巡检、日志清理、批量操作三大核心痛点,话不多说,直接上干货+源码。
一、阿里云ECS批量巡检脚本(Shell):一键排查多台服务器状态
日常运维中,服务器巡检是必修课,逐台登录检查CPU、内存、磁盘太耗时,这个脚本可适配阿里云云助手调用,无需手动登录,一键完成多台ECS巡检,异常状态自动记录日志,方便后续追溯。
#!/bin/bash # 阿里云ECS批量巡检脚本,适配云助手执行 LOG_FILE="/var/log/ecs_check.log" THRESHOLD=85 # 告警阈值,可根据自身需求调整 log() { echo "($(date '+%Y-%m-%d %H:%M:%S')) $*" >> "$LOG_FILE"; } # 检查CPU使用率 CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1) [ $CPU_USAGE -gt $THRESHOLD ] && log "WARN CPU使用率超标:${CPU_USAGE}%" # 检查内存使用率 MEM_USAGE=$(free | grep Mem | awk '{print int($3/$2 * 100)}') [ $MEM_USAGE -gt $THRESHOLD ] && log "WARN 内存使用率超标:${MEM_USAGE}%" # 检查磁盘使用率(筛选核心分区) df -h | grep -E '^/dev/' | while read line; do USAGE=$(echo $line | awk '{print $5}' | tr -d '%') [ $USAGE -gt $THRESHOLD ] && log "WARN 磁盘使用率超标:$(echo $line | awk '{print $6}') ${USAGE}%" done log "INFO 本次巡检完成,详细日志请查看:$LOG_FILE" echo "巡检完成,日志路径:$LOG_FILE"
使用说明:替换日志路径和告警阈值,在阿里云云助手添加脚本,选择需要巡检的ECS实例,一键执行即可,无需额外安装依赖。
二、日志清理脚本(Shell):自动清理,避免磁盘占满
阿里云服务器长期运行后,日志文件会不断累积,很容易导致磁盘占满,影响服务正常运行。这个脚本可自动清理指定目录7天前的日志,支持自定义清理目录,配合crontab定时执行,一劳永逸。
#!/bin/bash # 阿里云服务器日志清理脚本,适配主流Linux系统 # 自定义需要清理的日志目录,可根据自身环境添加 LOG_DIRS=("/var/log/nginx" "/data/logs" "/var/lib/docker/containers" "/var/log/mysql") KEEP_DAYS=7 # 保留最近7天的日志 # 循环清理每个目录下的日志文件 for dir in "${LOG_DIRS[@]}"; do if [ -d "$dir" ]; then find "$dir" -name "*.log*" -mtime +$KEEP_DAYS -delete echo "已清理 $dir 目录下7天前的日志" else echo "目录 $dir 不存在,跳过清理" fi done # 清理系统日志 journalctl --vacuum-time=7d echo "日志清理完成,系统日志已保留最近7天"
使用说明:添加需要清理的日志目录,执行chmod +x 脚本名.sh赋予权限,再通过crontab设置定时(如每天凌晨2点执行:0 2 * * * /root/log_clean.sh)。
三、阿里云ECS批量重启服务脚本(Python):无需逐台操作
遇到服务异常,需要重启多台ECS上的nginx、mysql等服务时,逐台登录操作太繁琐。这个脚本基于阿里云SDK开发,可批量重启指定ECS上的目标服务,高效又便捷。
#!/usr/bin/env python3 # 阿里云ECS批量重启服务脚本,需提前安装aliyun-python-sdk-ecs # 安装命令:pip3 install aliyun-python-sdk-ecs import json from aliyunsdkcore.client import AcsClient from aliyunsdkecs.request.v20140526 import RunCommandRequest # 替换为自己的阿里云AccessKey和地域ID client = AcsClient("你的AccessKeyId", "你的AccessKeySecret", "cn-hangzhou") def restart_service(instance_ids, service_name): request = RunCommandRequest() request.set_accept_format('json') request.set_RegionId("cn-hangzhou") # 替换为你的ECS地域ID request.set_InstanceIdss(json.dumps(instance_ids)) # 替换为需要操作的ECS实例ID列表 request.set_CommandContent(f"systemctl restart {service_name}") # 替换为需要重启的服务名 request.set_CommandType("RunShellScript") try: response = client.do_action_with_exception(request) return json.loads(response) except Exception as e: return f"执行失败:{str(e)}" # 示例:重启2台ECS上的nginx服务 if __name__ == "__main__": instance_list = ["i-xxxxxx", "i-xxxxxx"] # 替换为你的ECS实例ID service = "nginx" # 替换为需要重启的服务(如mysql、redis) result = restart_service(instance_list, service) print("执行结果:", result)
使用说明:提前安装阿里云Python SDK,替换AccessKey、地域ID、ECS实例ID和服务名,直接运行即可批量重启服务。
以上3个脚本,覆盖了运维日常80%的重复工作,适配阿里云各类服务器环境,亲测稳定好用,新手也能快速上手落地,帮大家节省大量重复劳作的时间。
其实在实际运维工作中,除了手动部署这类轻量化脚本,很多企业也会通过专业运维平台实现更高效的自动化管理,比如我了解到的江苏立维,其自研的OpsEye平台就有成熟的AutoOps自动化能力,内置丰富的运维脚本库,能实现Runbook自动执行,相当于把我们手动编写、部署脚本的流程简化,进一步解放运维人力,尤其适合IT资源较多、运维场景复杂的团队,这也是很多同行提升运维效率的常用方式。
最后提醒一句:脚本使用前,建议先在测试环境验证,避免影响生产服务;根据自身业务需求,调整脚本中的阈值和参数,适配自己的运维场景。