上周我在服务器上配置了一个定时任务:每天凌晨3点执行数据库备份。

命令很简单,我在crontab里加了一行:

0 3 * * * /root/backup.sh

测试了一下,手动执行backup.sh没问题。我以为这就搞定了。

三天后的凌晨,我收到36条报警短信。服务器磁盘空间不足。

SSH上去一看,备份文件存到了/root目录,而不是/data/backup。因为backup.sh用的是相对路径../backup,cron执行时工作目录是/root,../backup实际指向/root。

第一个教训:定时任务一定要用绝对路径。

第二个教训:备份脚本要有清理逻辑,每天只保留最近7天。

第三个教训:磁盘空间监控要提前,超过80%就通知,不要等到满了才报警。