温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何编写服务器运维脚本

发布时间:2026-09-08 01:21:25 来源:亿速云 阅读:88 作者:小樊 栏目:系统运维

编写服务器运维脚本(通常指使用 Shell、Python、Go 等语言编写的自动化脚本)核心目标是稳定、可重复、易维护。下面从思路、常用语言、示例、规范、安全几个方面系统说明。


一、先明确脚本要做什么(需求拆解)

在写代码前,先问自己:

  1. 运维场景是什么?

    • 系统初始化
    • 服务启停
    • 日志清理
    • 监控告警
    • 备份恢复
    • 批量部署
  2. 运行环境

    • Linux 发行版(CentOS / Ubuntu)
    • 是否 root 权限
    • 是否有 cron / systemd
  3. 失败怎么办

    • 是否需要重试
    • 是否通知人
    • 是否回滚

二、常用脚本语言选择

场景 推荐
简单系统操作 Bash
复杂逻辑 / 文本处理 Python
高性能 / 长期运行 Go
配置管理 Ansible(YAML)

三、Bash 运维脚本示例(最常见)

示例 1:系统健康检查脚本

#!/bin/bash

# 定义阈值
CPU_THRESHOLD=80
MEM_THRESHOLD=80

# 获取 CPU 使用率
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)

# 获取内存使用率
mem_usage=$(free | awk '/Mem/{printf("%.0f"), $3/$2*100}')

echo "CPU: $cpu_usage%  MEM: $mem_usage%"

if (( $(echo "$cpu_usage > $CPU_THRESHOLD" | bc -l) )); then
    echo "CPU 使用率过高"
fi

if [ "$mem_usage" -gt "$MEM_THRESHOLD" ]; then
    echo "内存使用率过高"
fi

✅ 可加入:

  • 邮件 / 钉钉通知
  • 写入日志文件

示例 2:日志自动清理

#!/bin/bash

LOG_DIR="/var/log/myapp"
DAYS=7

find $LOG_DIR -name "*.log" -mtime +$DAYS -exec rm -f {} \;

echo "$(date) 日志清理完成" >> /var/log/clean.log

加入 crontab:

0 2 * * * /opt/scripts/clean_log.sh

四、Python 运维脚本示例

示例:检测服务是否存活

import os
import smtplib

service = "nginx"

status = os.system(f"systemctl is-active --quiet {service}")

if status != 0:
    print(f"{service} 未运行,尝试重启")
    os.system(f"systemctl restart {service}")

✅ 优点:

  • 错误处理清晰
  • 易扩展(HTTP、数据库)

五、运维脚本编写规范(非常重要)

1️⃣ 脚本结构

#!/bin/bash
set -euo pipefail

LOG_FILE="/var/log/ops.log"
log() {
    echo "$(date '+%F %T') $1" | tee -a "$LOG_FILE"
}

2️⃣ 必须有的东西

  • 日志输出
  • 错误退出
  • 参数校验
  • 权限判断
[ "$(id -u)" -ne 0 ] && echo "需要 root" && exit 1

3️⃣ 避免“危险操作”

❌ 不要:

rm -rf /*

✅ 使用:

rm -rf "${DIR:?}"

六、安全与稳定性建议

  • 不在脚本中明文写密码(用环境变量 / vault)
  • 脚本权限 chmod 700
  • 重要操作先 dry-run
  • 关键脚本加入 git 管理
  • systemdsupervisor 管理常驻脚本

七、进阶方向

  • Ansible(批量运维)
  • Prometheus + 脚本告警
  • Shell + Python 混合
  • 日志集中(ELK / Loki)

如果你愿意,可以告诉我:

  • 你用的是 哪类服务器
  • 想做 哪类运维任务
  • 偏好 Bash 还是 Python

我可以直接帮你写一整套可上线使用的脚本。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI