crontab 用法详解

crontab 是 Unix 和 Linux 系统中用于定期执行任务的强大工具。通过 crontab,你可以安排任务在特定的时间或周期自动运行。以下是对 crontab 用法的详细解答。

基础语法

每一条 crontab 任务由 6 个部分组成:

  1. 分钟 (minute) - 范围是 0-59
  2. 小时 (hour) - 范围是 0-23
  3. 日期 (day of month) - 范围是 1-31
  4. 月份 (month) - 范围是 1-12
  5. 星期几 (day of week) - 范围是 0-707 都表示星期天
  6. 命令 - 要执行的命令或脚本的路径

时间字段格式

时间字段的格式支持以下几种模式:

  • 整数:直接用数字指定时间点。例如:15 表示 15 分钟、3 点钟、3 号,或星期三等。
  • 星号 (*):表示匹配所有可能的值。例如,* 在分钟字段意味着每一分钟都触发。
  • 范围:使用 - 表示一个连续的时间范围。例如,1-5 表示从 1 到 5。
  • 间隔 (/):使用 / 表示步进。比如,*/5 表示每 5 分钟执行一次,*/2 表示每隔 2 小时执行一次。
  • 列表 (逗号分隔):用逗号分隔的值表示多选。例如,1,15,30 表示在这些时间点触发任务。

常见的 crontab 用法示例

下面是一些典型的 crontab 设置示例:

每年 1 月 1 日早上 4 点执行任务

0 4 1 1 * /path/to/your/script.sh

每月的最后一天晚上 11 点执行任务
这种情况比较复杂,因为 crontab 不直接支持最后一天,可以结合 date 命令判断:

0 23 28-31 * * [ "$(date +\%d -d tomorrow)" = "01" ] && /path/to/your/script.sh

每两个小时执行一次任务

0 */2 * * * /path/to/your/script.sh

每 5 分钟执行一次任务

*/5 * * * * /path/to/your/script.sh

每月的 1 号和 15 号中午 12 点执行任务

0 12 1,15 * * /path/to/your/script.sh

每周一早上 6 点执行任务

0 6 * * 1 /path/to/your/script.sh

每天早上 3 点执行任务

0 3 * * * /path/to/your/script.sh

每分钟执行一次任务

* * * * * /path/to/your/script.sh

Cron特殊符号

@yearly (或 @annually):每年执行一次。

@yearly /path/to/your/script.sh

@monthly:每月执行一次。

@monthly /path/to/your/script.sh

@weekly:每周执行一次。

@weekly /path/to/your/script.sh

@hourly:每小时执行一次。

@hourly /path/to/your/script.sh

@daily (或 @midnight):每天午夜执行。

@daily /path/to/your/script.sh

@reboot:在系统启动时执行任务。

@reboot /path/to/your/script.sh

使用 crontab 命令

为其他用户设置 crontab(需要管理员权限):

sudo crontab -u username -e

删除所有 crontab 任务

crontab -r

编辑 crontab

crontab -e

这会打开一个文本编辑器来编辑当前用户的 crontab 文件。编辑后保存即可生效。

查看现有的 crontab 任务

crontab -l

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

如何调试 crontab 任务

邮件通知:系统通常会将 cron 任务的输出发送到用户的邮箱。如果你希望接收这些邮件,可以配置 MAILTO 变量:

MAILTO="[email protected]"
* * * * * /path/to/your/script.sh

日志记录:默认情况下,cron 不会输出任务的执行结果到终端。为了调试,通常可以将任务输出定向到一个日志文件:

* * * * * /path/to/your/script.sh >> /path/to/logfile.log 2>&1

这将任务的标准输出和错误输出都记录到 logfile.log 文件中。

注意事项

  1. 命令路径:在 cron 中运行的环境与你的终端环境不同,所以尽量使用命令的完整路径。例如:/usr/bin/python 而不是 python
  2. 权限问题:确保你在 crontab 中运行的脚本有执行权限 (chmod +x script.sh)。
  3. 相对路径问题:尽量使用绝对路径来避免目录混乱。

crontab 是一个功能强大且灵活的工具,用于定期任务的自动化处理。正确使用它可以大大提高效率并减少手动维护的工作量。