宝塔计划任务实战:备份清理全自动

去年我的博客数据库崩过一次。那天早上打开网站,一片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

```

宝塔计划任务实战:备份清理全自动-第1张图片-无双博客

周期设每周一次就够。注意路径别写错,`-delete`是真删,先去掉`-delete`跑一遍看看会删哪些文件,确认没问题再加回来。

释放内存与缓存刷新

小内存服务器(2G以下)建议加一个"释放内存"任务,每天一次,凌晨执行。它会清理系统缓存,缓解PHP进程内存泄漏带来的卡顿。

如果你的博客用了Redis或者页面缓存插件,可以加一个"访问URL"任务,定时访问你的缓存预热地址或者sitemap,让缓存保持新鲜。我自己的做法是每天早上6点访问一次首页和sitemap,蜘蛛来的时候页面都是热的,响应快。

我的完整任务清单

直接上表格,这是我跑了一年多的配置:

任务类型周期说明
数据库备份备份数据库每天 4:30云存储,留7份
网站文件备份备份网站每周日 5:00云存储,留4份
日志切割日志切割每天 1:00留7份
清理旧日志Shell脚本每周一 2:00find+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,备注"博客",一起少踩坑。

标签:宝塔面板,计划任务,自动备份,服务器运维