优化 Linux 运维脚本,核心目标是稳定、可读、高效、可维护、可自动化。下面从「脚本设计 → 编写规范 → 性能与安全 → 调试与维护」几个层面系统说明,并给出实用示例。
经验法则:简单用 bash,复杂用 Python
#!/usr/bin/env bash
set -euo pipefail
解释:
-e:命令失败立即退出-u:未定义变量报错-o pipefail:管道中任一命令失败都算失败❌ 硬编码:
rm -rf /data/logs/*
✅ 配置化:
LOG_DIR="/data/logs"
RETENTION=7
甚至可以:
source /etc/ops/config.sh
log() {
echo "[$(date '+%F %T')] $*" >> /var/log/ops.log
}
使用:
log "开始清理日志"
check_root() {
[[ $EUID -eq 0 ]] || { echo "需要 root 权限"; exit 1; }
}
好处:
❌ 慢:
for f in $(ls); do
echo $f
done
✅ 快:
for f in *; do
echo "$f"
done
for host in host1 host2 host3; do
(ssh "$host" uptime) &
done
wait
或用 xargs -P:
cat hosts.txt | xargs -P 5 -I{} ssh {} uptime
❌:
df -h
df -h
✅:
DISK=$(df -h)
echo "$DISK"
rm -rf "${DIR:?}/"*
如果 DIR 为空直接报错,避免 rm -rf /*
exec 9>/var/lock/backup.lock
flock -n 9 || exit 1
[[ -z "$1" ]] && { echo "用法: $0 <ip>"; exit 1; }
bash -x script.sh
或脚本内:
set -x
# 名称: clean_logs.sh
# 功能: 清理 7 天前日志
# 作者: ops
# 版本: v1.2
curl -X POST https://alert.example.com -d "脚本失败"
#!/bin/bash
cd /logs
rm -rf *
#!/usr/bin/env bash
set -euo pipefail
LOG_DIR="/logs"
RETENTION_DAYS=7
log() {
echo "[$(date '+%F %T')] $*" >> /var/log/clean.log
}
log "开始清理 $LOG_DIR"
find "$LOG_DIR" -type f -mtime +"$RETENTION_DAYS" -delete
log "清理完成"
shellcheck 静态检查cron + 邮件 / 日志如果你愿意,可以直接发一个你现有的运维脚本,我可以帮你逐行优化(性能 + 安全 + 可读性)。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。