Skip to main content

crontab 命令

crontab 是 Unix 和类 Unix 操作系统中用于定时执行任务的命令。通过 crontab 命令,用户可以设置定期执行的任务,称为 "cron jobs"。这些任务在特定的时间间隔运行,适用于自动化脚本、备份、监控、维护等场景。

crontab 基本命令:

  1. 查看当前用户的 crontab 任务:

    crontab -l

    这会列出当前用户的所有定时任务。

  2. 编辑当前用户的 crontab:

    crontab -e

    这会打开一个编辑器,允许你修改和添加定时任务。

  3. 删除当前用户的 crontab:

    crontab -r

    这会删除当前用户的所有定时任务。

  4. 列出所有用户的 crontab 文件(需要管理员权限):

    sudo cat /var/spool/cron/crontabs/

crontab 文件格式:

crontab 文件中的每一行定义一个定时任务,格式如下:

* * * * * command_to_run

这五个星号分别代表不同的时间字段,具体含义如下:

  1. 分钟(0 - 59)
  2. 小时(0 - 23)
  3. (1 - 31)
  4. (1 - 12)
  5. 星期几(0 - 7,其中 0 和 7 都表示星期天)

例如:

  • 0 5 * * * /path/to/script.sh: 每天凌晨 5 点执行 script.sh
  • 0 0 1 * * /path/to/backup.sh: 每月的第 1 天午夜 0 点执行 backup.sh
  • */15 * * * * /path/to/job.sh: 每 15 分钟执行一次 job.sh

特殊字符:

  1. 逗号 ( , ):列出多个值。

    • 例:0,30 5 * * * 表示在 5:00 和 5:30 各执行一次任务。
  2. 连字符 ( - ):表示一个范围。

    • 例:0 9-17 * * * 表示每天 9:00 到 17:00 之间的每个小时执行一次任务。
  3. 星号 ( * ):表示任意值。

    • 例:* * * * * 表示每分钟都执行任务。
  4. 斜杠 ( / ):表示步进执行。

    • 例:*/10 * * * * 表示每 10 分钟执行一次任务。

环境变量:

crontab 任务执行时,有一些重要的环境变量可以设置:

  • MAILTO: 如果设置了这个变量,cron 会将任务的输出发送到指定的邮件地址。
  • SHELL: 指定使用的 shell,默认是 /bin/sh

示例:

假设你想每天早上 8 点运行一个 Python 脚本 /home/user/script.py,并将输出结果保存在 /home/user/output.log 中,可以在 crontab -e 中添加以下内容:

0 8 * * * /usr/bin/python3 /home/user/script.py >> /home/user/output.log 2>&1

这个命令表示每天 8 点执行 script.py,并将输出追加到 output.log,错误信息也会被重定向到同一个文件。

常见问题:

  • crontab 环境不同cron 执行任务时的环境与你手动执行脚本的环境不同,可能缺少一些环境变量(如 PATH)。因此最好在脚本中指定完整的命令路径或显式声明所需的环境变量。
  • 脚本中的权限问题:如果脚本涉及权限控制,确保脚本有适当的执行权限 (chmod +x script.sh)。