Linux crontab 定时任务语法、命令及示例详解

Linux crontab 定时任务语法、命令及示例详解
无论是简单的每分钟日志记录、每日凌晨备份,还是每周报表生成、每月系统更新crontab都能轻松应对。用户可通过crontab -e编辑任务列表,crontab -l查看当前任务,配合输出重定向、环境变量配置等技巧,实现任务的精细化管理。其跨发行版兼容性和低资源占用特性,使其成为 Linux 系统中定时任务的首选工具,适合从新手到资深运维的各类用户使用。

一、基本概念

  • crontab:用户级的定时任务配置文件,每个用户都有独立的 crontab。
  • cron 服务:系统后台守护进程,负责读取并执行 crontab 中的任务。
  • 配置文件位置
    • 用户级:/var/spool/cron/<username>(由crontab -e生成)
    • 系统级:/etc/crontab 及 /etc/cron.d/ 目录下的文件

二、crontab 语法格式

* * * * * command
│ │ │ │ │
│ │ │ │ └─ 星期 (0-7, 0和7都代表周日)
│ │ │ └─── 月份 (1-12)
│ │ └───── 日期 (1-31)
│ └─────── 小时 (0-23)
└───────── 分钟 (0-59)
示例:每天凌晨 2 点执行备份脚本
0 2 * * * /path/to/backup.sh

三、常用时间表达式

表达式 含义 示例(执行date命令)
* * * * * 每分钟执行一次 * * * * * date >> /tmp/time.log
0 0 * * * 每天午夜 12 点执行 0 0 * * * /scripts/daily_clean.sh
0 */2 * * * 每两小时执行一次 0 */2 * * * /scripts/check_status.sh
0 8 * * 1 每周一上午 8 点执行 0 8 * * 1 /scripts/weekly_report.sh
0 0 1 * * 每月 1 号凌晨执行 0 0 1 * * /scripts/monthly_backup.sh
*/15 * * * * 每 15 分钟执行一次 */15 * * * * /scripts/monitor.sh

四、操作命令

  1. 编辑当前用户的 crontab
    crontab -e
    


    • 首次运行会让你选择编辑器(如 nano、vim)。
  2. 查看当前用户的 crontab
    crontab -l
    
  3. 删除当前用户的所有定时任务
    crontab -r
    
  4. 查看 cron 服务状态
    systemctl status cron   # Ubuntu/Debian
    systemctl status crond  # CentOS/RHEL
    

五、高级技巧

  1. 使用环境变量
    在 crontab 文件顶部设置变量(如PATH):
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    0 3 * * * /scripts/cleanup.sh
    
  2. 重定向输出
    将命令输出保存到日志文件:
    0 2 * * * /scripts/backup.sh >> /var/log/backup.log 2>&1
    
  3. 多命令组合
    使用分号或&&连接多个命令:
    0 6 * * * cd /data && tar -czf backup.tgz files/
    
  4. 注释与空行
    使用#添加注释,提高可读性:
    # 每天凌晨3点执行系统更新
    0 3 * * * apt-get update && apt-get upgrade -y
    

六、注意事项

  1. 路径问题:crontab 执行环境的PATH变量可能与用户登录环境不同,建议使用绝对路径。
  2. 权限问题:确保执行的脚本或命令有可执行权限(chmod +x /path/to/script.sh)。
  3. 日志查看:系统日志(如/var/log/syslog/var/log/cron)可帮助排查任务执行失败的原因。
  4. 避免冲突:不要同时运行多个相同任务,可能导致资源竞争。

七、替代方案

  • systemd.timer:现代 Linux 系统(如 Ubuntu 16.04+、CentOS 7+)推荐使用,功能更强大,支持精确时间触发和依赖管理。
  • anacron:适合非 7×24 小时运行的系统(如笔记本),确保任务即使在系统关机期间也能补执行。
根据需求选择合适的工具,简单周期性任务首选crontab,复杂场景可考虑systemd.timer
阅读剩余