公司博客 // 2026-06-06 · BY IDCBOT

Linux crontab定时任务教程:自动备份、定时脚本与常见坑排查

服务器上的重复劳动——每天备份、定时清日志、周期性跑数据、续证书——都该交给机器自动完成。Linux的crontab就是这个”定时闹钟”。本文十分钟教你配好定时任务,并重点讲清新手最常踩的”任务不执行”的坑。

一、crontab基本操作

crontab -e     # 编辑当前用户的定时任务
crontab -l     # 查看已有任务
crontab -r     # 清空任务(慎用)

每一行就是一个任务,格式为五个时间字段 + 要执行的命令

二、看懂时间格式(五个星号)

# 分  时  日  月  周   命令
  *   *   *   *   *   command
# 分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-7,0和7都是周日)

常用表达式速查:

  • 0 3 * * * —— 每天凌晨3点(备份黄金时段);
  • */10 * * * * —— 每10分钟一次;
  • 0 */6 * * * —— 每6小时一次;
  • 0 4 * * 0 —— 每周日凌晨4点;
  • 0 0 1 * * —— 每月1号零点。

三、实战:每天自动备份数据库

先写一个备份脚本 /root/backup.sh:

#!/bin/bash
DATE=$(date +%F)
mysqldump -u root -p'密码' --all-databases | gzip > /backup/db_$DATE.sql.gz
# 删除7天前的旧备份
find /backup -name "db_*.sql.gz" -mtime +7 -delete

赋予执行权限并加入crontab:

chmod +x /root/backup.sh
crontab -e
# 添加一行:每天凌晨3点执行
0 3 * * * /root/backup.sh >> /var/log/backup.log 2>&1

结尾的 >> 日志 2>&1 很关键——把输出和错误都记进日志,出问题时才有迹可循。

四、”crontab不执行”六大常见原因

这是最高频的求助问题,几乎都逃不出这六条:

  1. 用了相对路径:cron的运行环境很”干净”,命令和文件都要写绝对路径/usr/bin/python3 而非 python3);
  2. 环境变量缺失:cron不加载你的 .bashrc,脚本里依赖的PATH、变量需在脚本内显式声明;
  3. 脚本没有执行权限chmod +x 别忘;
  4. 时区不对:服务器时区与你以为的不一致,timedatectl 确认,海外服务器尤其注意(如香港节点默认可能非北京时间);
  5. 百分号未转义:命令中的 % 在crontab里有特殊含义,需写成 \%
  6. 没重启/没保存crontab -e 保存即生效,无需重启;但改系统级 /etc/crontab 后建议重载cron服务。

排查神器:查看cron自身的执行日志 grep CRON /var/log/syslog(Debian/Ubuntu),能看到任务有没有被触发、报了什么错。

五、进阶提示

  • 任务多了给每行加注释说明用途,半年后的你会感谢现在的自己;
  • 重要定时任务(如备份)配合监控告警——任务失败要能收到通知,否则”以为在备份,其实早停了”是最危险的错觉;
  • 需要秒级或复杂依赖的调度,考虑systemd timer或专门的任务调度工具。

把重复劳动交给crontab,你的服务器就有了”自动驾驶”能力。在免费试用的香港VPS上配一个每分钟写时间戳的测试任务,观察它准时触发——这是理解cron最快的方式。

// LEAVE A COMMENT

Your email address will not be published. Required fields are marked *