零基础也能写的服务器运维自动化脚本实战教程
为什么要学服务器运维自动化脚本?
手动重复执行备份、清理日志、重启服务不仅累,还容易出错。服务器运维自动化脚本就是让你把这些任务写成代码,由系统定时自动执行。
本文以最常用的 Linux Shell 脚本为例,带你从零写出第一个能用的自动化脚本。
动手前的准备
- 一台 Linux 服务器(CentOS 7+ 或 Ubuntu 20.04+ 均可),已经通过 SSH 登录。
- 基本的命令操作能力:会
cd、ls、vim即可。 - 一个文本编辑器(vim 或 nano),以及
crontab工具(通常系统自带)。 - 确认服务器已安装
bash(默认都有)。
如果你用的是宝塔面板,可以跳过命令行编辑,直接在“计划任务”里创建脚本,但本文依然推荐先理解原理。
第一步:写一个自动备份脚本
创建一个备份脚本文件:
vim /usr/local/bin/backup_www.sh
粘贴以下内容(按 i 进入插入模式,粘贴后按 Esc,输入 :wq 保存):
#!/bin/bash
# 自动备份 /www 目录到 /backup,保留最近7天的备份
BACKUP_DIR="/backup"
SOURCE_DIR="/www"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/www_$TIMESTAMP.tar.gz $SOURCE_DIR 2>/dev/null
# 删除7天前的备份
find $BACKUP_DIR -name "www_*.tar.gz" -mtime +7 -exec rm -f {} \;
echo "Backup completed: www_$TIMESTAMP.tar.gz"
给脚本执行权限:
chmod +x /usr/local/bin/backup_www.sh
第二步:用 crontab 实现定时执行
输入以下命令编辑当前用户的 crontab:
crontab -e
如果是第一次使用,会提示选择编辑器,选 2(vim)即可。
然后在文件末尾添加一行(每天凌晨3点执行一次):
0 3 * * * /usr/local/bin/backup_www.sh >> /var/log/backup.log 2>&1
保存退出。
查看定时任务列表:
crontab -l
如果看到刚才添加的行,说明设置成功。宝塔面板用户可以在“计划任务”里添加任务,类型选“Shell脚本”,时间设每天3点,脚本内容粘贴上面代码。
避坑指南与高频问题
脚本没有执行权限? 使用 chmod +x 后还报权限错误,检查脚本第一行 #! 是否正确,以及文件所有者是否有执行权。
/bin/bash
备份文件过大怎么办? 可以在 tar 命令中加入 --exclude 排除不需要的文件,比如缓存目录:--exclude='/www/cache'。
crontab 不执行? 先检查脚本本身能否手动运行:/usr/local/bin/backup_www.sh。
如果手动没问题,查看系统日志:grep CRON /var/log/syslog(CentOS 请查看 /var/log/cron)。
注意脚本中的路径要写绝对路径,crontab 的环境变量有限。
备份文件占满磁盘? 脚本中 find 使用 -mtime +7 删除旧文件,建议先手动测试 find 命令是否正确匹配文件。
可以改成 -mtime +3 保留3天。
验证自动化脚本是否生效
等一个执行周期(或手动测试)后,检查备份目录:
ls -lh /backup/
你会看到类似 www_20250325_030000.tar.gz 的文件。
打开日志确认:
cat /var/log/backup.log
输出应为 Backup completed: www_20250325_030000.tar.gz。
若没有,检查日志是否有错误提示。
你也可以临时修改 crontab 为每分钟执行一次来快速验证:
* * * * * /usr/local/bin/backup_www.sh >> /var/log/backup.log 2>&1
等一两分钟后看到备份文件生成,再改回正常时间即可。
最后提醒:编写服务器运维自动化脚本时,先在小范围测试,确认无误后再部署到生产环境。
遇到异常优先回看本文的高频问题部分,通常能快速定位。
如果你正在使用宝塔面板,可以结合面板的通知功能在脚本末尾加入 curl 推送消息到手机,真正实现无人值守。