编写服务器运维脚本(通常指使用 Shell、Python、Go 等语言编写的自动化脚本)核心目标是稳定、可重复、易维护。下面从思路、常用语言、示例、规范、安全几个方面系统说明。
在写代码前,先问自己:
运维场景是什么?
运行环境
失败怎么办
| 场景 | 推荐 |
|---|---|
| 简单系统操作 | Bash |
| 复杂逻辑 / 文本处理 | Python |
| 高性能 / 长期运行 | Go |
| 配置管理 | Ansible(YAML) |
#!/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
✅ 可加入:
#!/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
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}")
✅ 优点:
#!/bin/bash
set -euo pipefail
LOG_FILE="/var/log/ops.log"
log() {
echo "$(date '+%F %T') $1" | tee -a "$LOG_FILE"
}
[ "$(id -u)" -ne 0 ] && echo "需要 root" && exit 1
❌ 不要:
rm -rf /*
✅ 使用:
rm -rf "${DIR:?}"
chmod 700systemd 或 supervisor 管理常驻脚本如果你愿意,可以告诉我:
我可以直接帮你写一整套可上线使用的脚本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。