宝塔计划任务实战:备份清理全自动
去年我的博客数据库崩过一次。那天早上打开网站,一片500错误,SSH上去一看,磁盘满了——网站日志堆了40多个G,把盘撑爆了,MySQL直接写不进去。更惨的是,我上一次手动备份是三个月前……
从那以后我把所有维护工作全扔给了宝塔的计划任务。备份、日志清理、缓存刷新、SSL续期检查,全部自动跑,我只负责每周瞄一眼执行日志。今天把这套配置完整分享出来,照着抄就行。
计划任务在哪,先认识一下
宝塔面板左侧菜单有个"计划任务",点进去就是。它本质上是给Linux的crontab套了个可视化外壳,不用你记cron表达式那些星号是什么意思。
任务类型下拉框里有几个现成的:Shell脚本、备份网站、备份数据库、日志切割、释放内存、访问URL。前面几个够用90%的场景了。
第一优先级:数据库备份
这是保命的,先配这个。
1. 计划任务 → 任务类型选"备份数据库"
2. 执行周期:每天,凌晨4点30(错开整点,服务器负载低)
3. 备份到:有条件一定选云存储(需要先在"软件商店"装对应的云存储插件,腾讯云COS、阿里云OSS、七牛都有),没条件就本地
4. 保留份数:本地留3份,云端留7份
划重点:备份到本地等于没备份一半。服务器要是整个挂了(硬盘损坏、被删库、跑路),本地备份跟着一起没。云存储一个月也就几毛钱,别省。
网站文件备份同理,任务类型选"备份网站",周期可以放宽到每周一次,因为文件变动没数据库频繁。
第二件事:日志切割,别让日志撑爆磁盘
就是我开头翻车的那个坑。宝塔自带"日志切割"任务类型:
1. 任务类型选"日志切割"
2. 选中你的网站
3. 周期设每天凌晨1点
4. 保留最新的7份
这样Nginx的访问日志每天会被切割归档,只留一周的量。如果你还想更狠一点,加一个Shell脚本任务,定期清理超过30天的备份日志:
```bash
find /www/wwwlogs/ -name "*.log*" -mtime +30 -delete
```
周期设每周一次就够。注意路径别写错,`-delete`是真删,先去掉`-delete`跑一遍看看会删哪些文件,确认没问题再加回来。
释放内存与缓存刷新
小内存服务器(2G以下)建议加一个"释放内存"任务,每天一次,凌晨执行。它会清理系统缓存,缓解PHP进程内存泄漏带来的卡顿。
如果你的博客用了Redis或者页面缓存插件,可以加一个"访问URL"任务,定时访问你的缓存预热地址或者sitemap,让缓存保持新鲜。我自己的做法是每天早上6点访问一次首页和sitemap,蜘蛛来的时候页面都是热的,响应快。
我的完整任务清单
直接上表格,这是我跑了一年多的配置:
| 任务 | 类型 | 周期 | 说明 |
|---|---|---|---|
| 数据库备份 | 备份数据库 | 每天 4:30 | 云存储,留7份 |
| 网站文件备份 | 备份网站 | 每周日 5:00 | 云存储,留4份 |
| 日志切割 | 日志切割 | 每天 1:00 | 留7份 |
| 清理旧日志 | Shell脚本 | 每周一 2:00 | find+mtime清30天前 |
| 释放内存 | 释放内存 | 每天 5:30 | 小内存机必备 |
| 缓存预热 | 访问URL | 每天 6:00 | 访问首页+sitemap |
| 备份验证提醒 | Shell脚本 | 每月1号 | 检查备份文件大小并推送 |
最后一条多说两句。备份最怕的不是没备份,是备份文件是坏的、是空的,你还一直以为有保障。我写了个小脚本检查最新备份的文件大小,小于预期就通过Server酱推微信提醒我。几行代码,关键时刻能救命。
```bash
| SIZE=$(find /www/backup/database -name "*.sql.gz" -mtime -1 -exec du -m {} \; | awk '{print $1}' | head -1) |
| if [ -z "$SIZE" ] | [ "$SIZE" -lt 5 ]; then |
curl "https://sctapi.ftqq.com/你的KEY.send?title=备份异常,速查"
fi
```
阈值那个5(MB)按你自己数据库的正常大小改。
踩过的坑,提前告诉你
- 任务堆在整点执行:备份、切割、释放内存全设在凌晨3:00,服务器瞬间负载飙高,网站卡死几分钟。错开时间,一个任务一个坑位。
- 备份份数设太多:本地留30份数据库备份,又把磁盘吃满了。本地3份足矣,历史版本靠云端。
- Shell脚本没测试直接上线:路径写错,把不该删的删了。任何带删除操作的脚本,先手动跑一遍确认输出。
- 改了任务忘了看执行日志:每个任务右边有"日志"按钮,配完新任务第二天记得点开看一眼是否成功。
FAQ常见问题
Q:计划任务没执行怎么排查?
A:先看任务日志有没有报错;再SSH执行`systemctl status crond`确认cron服务活着;最后检查服务器时间和时区对不对(`date`命令),时区错了任务会在奇怪的时间跑。
Q:备份大数据库会不会拖垮网站?
A:几百MB以内基本无感。上G的库建议错峰到访问最低的时段,或者用mysqldump加`--single-transaction`参数(宝塔默认备份就带),不锁表。
Q:免费的云存储空间不够怎么办?
A:腾讯云COS和阿里云OSS按量付费,博客备份这点量一个月几毛到几块钱。真不想花钱,可以用Shell脚本把备份rclone同步到OneDrive之类的网盘。
Q:宝塔计划任务和直接写crontab有啥区别?
A:底层就是crontab,宝塔只是给了个界面和现成模板。会命令行的直接写crontab也行,但宝塔的日志查看和备份模板确实省事。
推荐阅读
服务器配置有疑问?加微信:15207283116,备注"博客",一起少踩坑。
标签:宝塔面板,计划任务,自动备份,服务器运维
需要了解更多使用技巧?
扫码加我微信,我来给你详细解答!
微信号:15207283116
(博客来的朋友优先通过!)
—— 本文仅供参考,具体以实际情况为准 ——
还木有评论哦,快来抢沙发吧~