零基础入门:服务器自动化运维脚本合集编写与使用指南
为什么你需要一份自动化运维脚本合集
日常维护服务器时,我们经常重复执行相同操作:清理日志、备份数据库、检查磁盘、更新系统等。
把这些任务写成脚本并收集成一个服务器自动化运维脚本合集,能大幅减少重复劳动,还能避免手动输错命令。
即使是刚接触运维的新手,也可以直接复用社区或自己总结的脚本合集,快速提升效率。
准备工作:环境与基础认知
在动手编写脚本合集之前,你需要一台 Linux 服务器(CentOS 7+ 或 Ubuntu 20.04+ 都行)和一个具备 sudo 权限的普通用户。
如果你用的是宝塔面板,也可以通过面板的“计划任务”功能定时执行脚本,但本文以命令行环境为主,更适合后续灵活扩展。
另外,建议先了解几个基础概念:
- Shell 脚本:以
.sh结尾的文本文件,里面写的是 Linux 命令的集合。 - 执行权限:脚本需要
chmod +x才能运行。 - 脚本存放目录:推荐统一放在
/usr/local/bin/scripts/或者家目录下的~/scripts/,方便管理。
# 创建脚本存放目录(示例)
mkdir -p ~/scripts
cd ~/scripts
核心操作:从零编写你的第一份脚本合集
1. 编写一个系统健康检查脚本
先写一个最简单的脚本,用来检查 CPU、内存、磁盘使用率。
将以下内容保存为 check_health.sh:
#!/bin/bash
echo "===== 系统健康检查 $(date) ====="
echo "CPU 负载:$(uptime | awk -F'load average:' '{print $2}')"
echo "内存使用:$(free -h | grep Mem | awk '{print $3 "/" $2}')"
echo "磁盘使用:$(df -h / | awk 'NR==2{print $3 "/" $2}')"
赋予执行权限并试运行:
chmod +x check_health.sh
./check_health.sh
2. 编写定时清理日志脚本
日常运维中日志文件撑爆磁盘是常见问题。
写一个 clean_logs.sh,保留最近 7 天的日志:
#!/bin/bash
LOG_DIR="/var/log"
find "$LOG_DIR" -type f -name "*.log" -mtime +7 -exec rm -f {} \;
echo "已清理 $LOG_DIR 中 7 天前的 .log 文件"
给脚本加权限后,可以手动测试一次。
3. 创建脚本索引文件
为了形成真正的脚本合集,建议建一个索引文件 index.txt 记录每个脚本的用途和路径,这样后续查找更方便。
# ~/scripts/index.txt
check_health.sh - 系统健康检查(CPU/内存/磁盘)
clean_logs.sh - 清理7天前的旧日志
backup_db.sh - 备份MySQL数据库(后续编写)
update_system.sh - 自动更新系统包
4. 将脚本合集加入 PATH
为了方便在任何目录下直接运行脚本,可以将脚本目录加入环境变量:
echo 'export PATH=$PATH:~/scripts' >> ~/.bashrc
source ~/.bashrc
这样你在任意位置输入 check_health.sh 就能执行。
避坑指南:新手最常见的四个错误
错误1:忘记给脚本加执行权限
运行 ./xxx.sh 时报 Permission denied。
解决:chmod +x xxx.sh。
错误2:脚本中使用了绝对路径,但切换目录后失效
如果脚本中用 cd /some/path,建议在脚本开头添加 cd $(dirname $0) 来切换到脚本所在目录。
错误3:crontab 中执行脚本遇到环境变量问题
在计划任务里运行脚本时,可能找不到 find、mysql 等命令。
解决办法:在脚本开头使用完整路径(如 /usr/bin/find),或者先 source /etc/profile 加载环境变量。
错误4:盲删日志文件导致进程仍占用磁盘空间
使用 rm -f 删除日志后,如果文件仍被进程打开(比如 nginx 日志),磁盘空间并不会立即释放。
正确做法是使用 truncate -s 0 文件名 清空内容,或重启对应服务。
效果验证:让脚本合集真正跑起来
- 手动验证单个脚本:运行
./check_health.sh,检查输出是否正常。 - 验证 PATH 集成:在任意目录执行
check_health.sh,看是否直接生效。 - 使用 crontab 实现定时执行(以清理日志为例):
crontab -e
# 每天凌晨 3 点执行清理
0 3 * * * /home/youruser/scripts/clean_logs.sh >> /var/log/scripts.log 2>&1
保存后等待时间到达或手动测试:
# 手动模拟执行
bash /home/youruser/scripts/clean_logs.sh
- 查看日志确认:
cat /var/log/scripts.log看是否有错误输出。
当所有脚本都能稳定输出预期结果时,你的服务器自动化运维脚本合集就初步成型了。
后续可以不断扩充备份、安全扫描、自动部署等脚本,逐步形成个人运维工具箱。
如果你在操作中遇到报错,优先检查脚本中的路径、命令是否存在以及权限设置。