crontab配置定时任务

发布于:2025-07-23 ⋅ 阅读:(18) ⋅ 点赞:(0)

Crontab 配置规则详解

crontab 是 Linux/Unix 系统中用于设置定时任务的工具,允许用户按固定时间周期执行命令或脚本。以下是它的核心配置规则:


1. 基本语法

* * * * * <command-to-execute>
│ │ │ │ │
│ │ │ │ └── 星期几 (0 - 6, 0=星期日)
│ │ │ └──── 月份 (1 - 12)
│ │ └────── 日 (1 - 31)
│ └──────── 小时 (0 - 23)
└────────── 分钟 (0 - 59)
  • * 表示“每”(如 * * * * * 每分钟执行一次)。
  • , 表示多个时间点(如 0,15,30 * * * * 每小时的 0、15、30 分执行)。
  • - 表示范围(如 0 9-18 * * * 每天 9 点到 18 点整点执行)。
  • / 表示间隔(如 */5 * * * * 每 5 分钟执行一次)。

2. 常用示例

示例 说明
* * * * * cmd 每分钟执行一次
1 * * * * * cmd 每小时的第1分钟执行一次
*/5 * * * * cmd 每 5 分钟执行一次
0 * * * * cmd 每小时整点执行
0 0 * * * cmd 每天午夜执行
0 9 * * 1-5 cmd 工作日(周一到周五)上午 9 点执行
0 0 1 * * cmd 每月 1 号午夜执行
@reboot cmd 系统启动时执行(仅部分 cron 支持)
@daily cmd 每天午夜执行(等价于 0 0 * * *
@hourly cmd 每小时执行(等价于 0 * * * *

3. 特殊符号与变量

(1)环境变量

cron 默认环境与终端不同,建议在 crontab 开头定义:

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/bin
MAILTO=user@example.com  # 任务输出发送到指定邮箱

(2)转义 %

如果命令中包含 %(如 date +%Y),需转义为 \%

* * * * * echo "Time: $(date +\%Y-\%m-\%d)" >> /tmp/log

4. 日志与调试

(1)查看 cron 日志

  • Ubuntu/Debian
    grep CRON /var/log/syslog
    
  • CentOS/RHEL
    grep CRON /var/log/cron
    

(2)捕获错误输出

* * * * * /path/to/script.sh >> /tmp/log 2>&1
  • >> /tmp/log:追加标准输出到文件。
  • 2>&1:将错误输出重定向到标准输出。

5. 注意事项

  1. 路径问题

    • cron 默认从用户家目录执行,脚本中需使用绝对路径。
    • 示例:
      * * * * * /usr/bin/python3 /home/user/script.py
      
  2. 权限问题

    • 确保脚本有可执行权限:
      chmod +x /path/to/script.sh
      
    • 如果任务需 sudo,建议直接以 root 用户配置 crontab
  3. 时间同步

    • 如果服务器时间不准,cron 任务会受影响,建议启用 NTP:
      timedatectl set-ntp true
      
  4. 最小间隔

    • cron 最小时间单位为 1 分钟,如需秒级任务,改用 sleep 循环或 systemd 定时器。

6. 管理 crontab

命令 说明
crontab -e 编辑当前用户的定时任务
crontab -l 列出当前用户的任务
crontab -r 删除所有任务(慎用!)
crontab -u root -e 编辑指定用户的任务(需权限)

7. 示例:备份数据库

0 3 * * * /usr/bin/mysqldump -u root -pPASSWORD dbname > /backup/db_$(date +\%Y\%m\%d).sql
  • 每天凌晨 3 点备份 MySQL 数据库。

总结

  • 时间字段分钟 小时 日 月 星期
  • 特殊符号* , - /
  • 调试技巧:检查日志、捕获错误输出、使用绝对路径。
  • 秒级任务:需借助 while + sleepsystemd

通过合理配置 crontab,可以实现自动化运维任务(如备份、监控、清理日志等)。


网站公告

今日签到

点亮在社区的每一天
去签到