每天凌晨自动备份,听起来是不是挺复杂?其实借助GitHub Copilot,你完全可以把这件事变得非常简单——只需编写一个脚本,就能将服务器上的关键数据打包并上传至云存储,再也不必手动敲命令,也无需反复复制旧代码修改参数。下面就是完整的实战过程。
确保Copilot在线并感知上下文
打开VS Code,首先确认GitHub Copilot扩展已安装并成功登录。查看状态栏右下角,如果显示“Copilot Ready”且未变灰,说明一切就绪。
在项目根目录下新建一个文件,命名为 backup_daily.sh。使用快捷键 Ctrl+Enter(Windows/Linux)或 Cmd+Enter(macOS)调出Copilot侧边栏,此时它会自动读取当前文件名和光标位置的上下文信息。
关键一步:在空白文件的第一行写下这条注释:
# 每日凌晨2:15执行:备份/etc/nginx、/var/www/html及MySQL数据库至阿里云OSS
别小看这段自然语言描述,它能让Copilot生成的脚本更加精准。如果跳过这一步,生成的脚本很可能遗漏目标路径,或者错误地使用了AWS CLI。
用自然语言描述让Copilot生成备份逻辑
在注释下面另起一行,输入:
「生成一个带错误检测的bash脚本,使用mysqldump导出wordpress库,压缩nginx配置和html目录,用ossutil上传到oss://my-backup-prod/daily/,失败时发邮件给admin@example.com」
按下Tab键接受Copilot的推荐。它会输出一个完整的代码块,其中包含 set -e、临时目录创建、mysqldump超时控制、tar --warning=no-file-changed、ossutil cp -r 等一系列逻辑。
生成之后需要检查代码中是否有 rm -rf "$TMP_DIR" 这个清理步骤。如果没有,务必手动补充,否则连续运行下去磁盘迟早会被占满。
注入安全变量,切勿写死密码
在Copilot生成的脚本里,数据库连接部分可能长这样:-u root -p'123456'。这必须改掉。
将它替换成:-u "$DB_USER" -p"$DB_PASS"。
然后在脚本开头添加这三行:
# 从环境变量或.env文件加载
source /etc/backup/.env 2>/dev/null || true
export DB_USER DB_PASS OSS_ENDPOINT OSS_BUCKET OSS_KEY_ID OSS_KEY_SECRET
这听起来似乎很简单,但这里有一个很多人容易踩的坑:直接写明文密码,一旦提交到Git就会将密钥暴露出去。Copilot默认也不会主动避开这个风险,所以必须自行处理。
配置系统crontab,确保按时执行
第一步:为脚本添加可执行权限 chmod +x backup_daily.sh。
第二步:切换到root用户 sudo su -。
第三步:编辑系统crontab crontab -e。
第四步:添加调度行 15 2 * * * /opt/scripts/backup_daily.sh >> /var/log/backup.log 2>&1。
值得特别提醒的是:不要使用普通用户的crontab。ossutil需要root权限才能读取 /etc/backup/.env,而且MySQL的socket路径在非root用户下很可能不可访问。
手动跑一次,检查日志输出
直接执行 ./backup_daily.sh,等待大约90秒。
然后立即运行 tail -n 20 /var/log/backup.log,确认最后一行是否类似 [SUCCESS] Uploaded oss://my-backup-prod/daily/20260528_0215.tar.gz。
如果看到的是 Permission denied 或者 command not found: ossutil,十有八九是PATH未继承,或者ossutil没有全局安装。解决方法是在crontab里改用绝对路径:/usr/bin/ossutil。

