数据不丢失:青龙面板任务备份与10分钟恢复实战
你是否曾因服务器故障、误操作或版本更新导致青龙面板(Qinglong)的定时任务数据丢失?作为支持Python3、JavaScript、Shell、TypeScript的定时任务管理平台,青龙面板存储的任务配置、执行记录和环境变量往往承载着重要的业务逻辑。本文将通过可视化操作指南+自动化脚本两种方式,带你构建完整的数据安全方案,确保任务数据万无一失。
一、备份原理:青龙数据安全架构解析
青龙面板的核心数据存储在data/目录下,主要包括:
- 数据库文件:任务配置、定时规则、执行日志(位于
data/db/) - 上传文件:用户上传的脚本与资源(位于
data/upload/)
备份功能通过back/services/system.ts实现,核心逻辑是将上述目录打包为data.tgz压缩文件。恢复时通过back/api/system.ts提供的接口解压并覆盖原始数据目录,实现完整的数据迁移与恢复。
二、两种备份方案:从手动操作到自动化
2.1 手动备份:3步导出关键数据
- 登录青龙面板,进入系统设置页面(对应前端代码src/pages/setting/index.tsx)
- 在数据管理模块点击「导出数据」按钮
- 浏览器自动下载
data.tgz文件,建议重命名为ql_backup_20250101.tgz(按日期区分版本)
2.2 定时备份:配置自动执行脚本
通过青龙面板自带的定时任务功能,实现每周日凌晨3点自动备份:
- 新建Shell任务,命令如下:
# 调用系统备份接口生成文件
curl -X PUT -H "Content-Type: application/json" -d '{"type": ["db", "upload"]}' http://localhost:5700/api/system/data/export
# 移动备份文件到指定目录
mv /ql/data/data.tgz /ql/backup/ql_backup_$(date +%Y%m%d).tgz
- 设置Cron表达式为
0 3 * * 0(每周日凌晨3点执行) - 任务日志将保存在src/pages/log/index.tsx页面可查
⚠️ 注意:确保已创建
/ql/backup目录并设置权限,可通过终端执行mkdir -p /ql/backup && chmod 777 /ql/backup
三、恢复测试:10分钟验证数据有效性
3.1 恢复操作步骤
- 进入青龙面板系统设置 → 数据管理页面
- 点击「导入数据」,上传备份文件
ql_backup_20250101.tgz - 系统自动执行解压(对应代码back/services/system.ts#L455-L464)
- 重启青龙服务使配置生效:
ql reload
3.2 有效性验证清单
| 检查项 | 验证方法 | 对应文件路径 |
|---|---|---|
| 任务数量 | 对比恢复前后「定时任务」页面数量 | src/pages/crontab/index.tsx |
| 执行记录 | 查看最近任务日志是否完整 | src/pages/log/index.tsx |
| 环境变量 | 检查「依赖管理」页面配置是否存在 | src/pages/dependence/index.tsx |
3.3 恢复失败处理
若恢复后面板无法启动,可通过以下命令手动恢复:
# 进入青龙目录
cd /data/web/disk1/git_repo/GitHub_Trending/qi/qinglong
# 解压备份文件
tar zxvf /ql/backup/ql_backup_20250101.tgz -C ./data/
# 重启服务
docker-compose restart
四、企业级最佳实践
4.1 备份策略建议
- 保留周期:至少保留最近3个备份文件,使用
find /ql/backup -mtime +30 -delete自动清理30天前备份 - 异地存储:通过脚本将备份文件同步到外部存储(如NAS或云存储)
- 加密保护:敏感场景可使用
openssl enc -aes-256-cbc -salt -in data.tgz -out data.tgz.enc加密备份
4.2 监控告警配置
在src/pages/setting/notification.tsx页面配置备份结果通知,当备份失败时通过以下方式提醒:
- 企业微信机器人Webhook
- 邮件通知
- 消息通知(需额外配置API密钥)
五、常见问题解决
Q:备份文件超过100MB怎么办?
A:通过back/services/system.ts#L438-L453的exportData方法支持按需备份,调用时指定type: ["db"]仅备份数据库文件。
Q:恢复后任务执行失败?
A:检查依赖是否完整,可执行ql update更新依赖,或通过src/pages/dependence/index.tsx页面重新安装缺失依赖。
Q:能否通过API实现远程备份?
A:可以使用以下命令,需替换<your_token>为实际访问令牌:
curl -X PUT -H "Authorization: Bearer <your_token>" -d '{"type": ["db", "upload"]}' http://面板IP:5700/api/system/data/export
通过本文方法,你已掌握青龙面板数据的全生命周期管理。建议立即执行首次备份,并将备份任务加入日常运维清单,确保业务连续性。完整备份恢复模块代码可查看back/services/system.ts与back/api/system.ts实现细节。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



