cron 实战:备份、重定向、防重入与常见坑

一、定时备份示例

0 2 * * * /opt/backup.sh >> /var/log/backup.log 2>&1

脚本里用 mysqldump 或 tar 打包,按日期命名,并清理 7 天前的旧备份。

二、输出与重定向

  • 默认 cron 会把输出用邮件发给用户(常无邮件服务而丢失);
  • 务必显式重定向:>> log 2>&1,或丢弃 > /dev/null 2>&1;
  • 想在失败时告警:脚本里判断退出码再 curl 通知。

三、常见坑

坑 解决
% 被 cron 当成换行 脚本里用 % 转义,或把逻辑放进 .sh 文件
相对路径找不到文件 crontab 里先 cd /path 或用绝对路径
时区不对 cron 用系统时区,确认 timedatectl

四、防重入

任务可能上一次还没跑完又触发,用 flock 加锁:

0 * * * * flock -n /tmp/backup.lock /opt/backup.sh

锁占用则跳过本次,避免并发叠加拖垮机器。