Skip to main content
Benny的泥坑 Logo

crontab的用法整理

April 30, 2025
3 min read

本文整理了 Linux/Unix 系统中 crontab 定时任务工具的详细用法,涵盖基础语法、常用操作命令、实际应用示例、环境变量配置、日志调试方法以及高级技巧,帮助用户高效实现自动化任务调度。

crontab 是 Linux/Unix 系统中用于设置定时任务的工具,可以让系统在指定时间自动执行脚本或命令。以下是 详细用法指南,包括基础语法、配置方法、调试技巧和实际示例。


一、基本语法

  1. crontab 文件格式 每个定时任务占一行,格式如下:
Terminal window
* * * * * command_to_execute
└── 星期几 (0-6, 0=周日)
└──── 月份 (1-12)
└────── (1-31)
└──────── 小时 (0-23)
└────────── 分钟 (0-59)
  1. 特殊符号 | 符号 | 说明 | 示例 | |------|--------------------------|--------------------| | * | 任意值(每分钟/每小时等)| * * * * * → 每分钟执行 | | , | 指定多个时间点 | 0,15,30 * * * * → 每小时的 0、15、30 分执行 | | - | 时间范围 | 0 9-17 * * * → 每天 9 点到 17 点整点执行 | | / | 间隔时间 | */5 * * * * → 每 5 分钟执行 |

二、常用操作

  1. 编辑 crontab
Terminal window
crontab -e # 编辑当前用户的定时任务

(首次使用会提示选择编辑器,推荐 nanovim

  1. 查看 crontab
Terminal window
crontab -l # 列出当前用户的定时任务
  1. 删除 crontab
Terminal window
crontab -r # 删除所有定时任务(谨慎使用!)
  1. 指定用户
Terminal window
crontab -u username -e # 编辑指定用户的定时任务(需 root 权限)

三、实际示例

  1. 每天凌晨 4 点执行备份脚本
Terminal window
0 4 * * * /bin/bash /path/to/backup_script.sh
  1. 每小时的第 5 分钟执行
Terminal window
5 * * * * /usr/bin/python3 /path/to/script.py
  1. 每周一 8:30 发送邮件
Terminal window
30 8 * * 1 /usr/sbin/sendmail [email protected] < /tmp/report.txt
  1. 每 10 分钟检查服务
Terminal window
*/10 * * * * /usr/bin/systemctl check nginx
  1. 每月 1 号凌晨 3 点清理日志
Terminal window
0 3 1 * * /bin/rm -rf /var/log/nginx/*.log

四、环境变量问题 cron 默认环境与终端不同,可能导致脚本执行失败。解决方法:

  1. 指定完整路径
Terminal window
0 * * * * /usr/bin/curl https://example.com/api/ping
  1. 在 crontab 中加载环境
Terminal window
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 * * * * source ~/.bashrc && /path/to/script.sh
  1. 在脚本内设置环境
#!/bin/bash
export PATH=/usr/local/bin:$PATH
# 后续命令...

五、日志与调试

  1. 查看 cron 执行日志
Terminal window
tail -f /var/log/syslog | grep cron # Ubuntu/Debian
tail -f /var/log/cron # CentOS/RHEL
  1. 重定向输出到文件
Terminal window
0 * * * * /path/to/script.sh >> /var/log/cron.log 2>&1

>> 追加日志

2>&1 将错误输出和标准输出合并

  1. 测试 cron 任务
Terminal window
# 手动运行脚本,确保无报错
/bin/bash /path/to/script.sh
# 强制立即执行一次(仅适用于某些系统)
crontab -l | grep -v "^#" | cut -f 6- -d " " | while read cmd; do eval $cmd; done

六、注意事项

  1. 脚本权限
    Terminal window
    chmod +x /path/to/script.sh # 确保可执行
  2. 避免频繁任务
    * * * * *(每分钟)可能对系统造成负担,建议至少间隔 5 分钟(*/5 * * * *)。
  3. 依赖问题
    如果脚本依赖 GUI 或 DISPLAY,需额外配置:
    Terminal window
    * * * * * export DISPLAY=:0 && /path/to/gui_script.sh
  4. 容器环境
    在 Docker 中建议使用 supervisord 或直接通过 CMD 运行脚本。

七、高级用法

  1. 随机延迟(避免任务集中执行)
Terminal window
# 每天 3 点随机延迟 0-300 秒执行
0 3 * * * sleep $((RANDOM\%300)) && /path/to/script.sh
  1. 锁机制(防止重复执行)
Terminal window
*/10 * * * * flock -n /tmp/backup.lock -c "/path/to/backup.sh"
  1. 邮件通知
Terminal window
0 * * * * /path/to/monitor.sh

(任务输出会发送到指定邮箱)


总结

操作命令
编辑定时任务crontab -e
查看定时任务crontab -l
删除所有任务crontab -r
指定用户crontab -u username -e
日志查看tail -f /var/log/cron

掌握这些技巧后,你可以轻松实现 自动化备份、日志轮转、服务监控 等任务!