编写服务器运维 Shell 脚本,核心目标是自动化、可监控、可复用、安全。下面我从思路 → 基础结构 → 常见场景示例 → 编写规范与技巧四个方面系统讲一下。
在动手写脚本前,先明确:
脚本解决什么问题
运行环境
#!/bin/bash)执行方式
#!/bin/bash
# 脚本说明
# 功能:服务器磁盘空间检查
# 作者:xxx
# 日期:2026-01-15
set -euo pipefail
# 变量定义
THRESHOLD=80
LOG_FILE="/var/log/disk_check.log"
# 函数定义
check_disk() {
local usage
usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$usage" -gt "$THRESHOLD" ]; then
echo "$(date) 磁盘使用率过高: ${usage}%" >> "$LOG_FILE"
fi
}
# 主逻辑
main() {
check_disk
}
main "$@"
#!/bin/bash
echo "==== $(date) ===="
echo "CPU 负载: $(uptime)"
echo "内存使用:"
free -h
echo "磁盘使用:"
df -h
#!/bin/bash
LOG_DIR="/var/log/myapp"
DAYS=7
find "$LOG_DIR" -name "*.log" -mtime +$DAYS -delete
配合 crontab:
0 2 * * * /opt/scripts/clean_log.sh
#!/bin/bash
SERVICE="nginx"
if ! systemctl is-active --quiet "$SERVICE"; then
echo "$(date) $SERVICE 未运行,尝试重启" >> /var/log/service.log
systemctl restart "$SERVICE"
fi
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%F)
mysqldump -u root -p'password' dbname > "$BACKUP_DIR/db_$DATE.sql"
⚠️ 密码写脚本不安全,建议用 .my.cnf
#!/bin/bash
for ip in 192.168.1.10 192.168.1.11; do
ssh root@$ip "uptime"
done
#!/bin/bashset -euo pipefail
/opt/scripts)rm -rf /cron / systemd timermail / 钉钉 / 企业微信告警ansible 替代复杂 Shellbash + python 混合运维如果你愿意,可以告诉我:
我可以直接帮你写一套可落地使用的脚本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。