Crontab 使用介绍

Crontab 是一个用于在 Unix、Linux 系统中执行定时任务的命令。它允许用户设置周期性运行的任务,这些任务可以是备份、监控或其他任何需要定期执行的操作。

Crontab 文件格式

Crontab 文件中的每一行都代表一个定时任务,格式如下:

* * * * * command

每个星号(*)可以被替换为具体的数值或范围,来指定任务执行的时间。例如:

  • 0 12 * * * 表示每天中午12点执行。
  • 30 4 1 * * 表示每月1日凌晨4:30执行。
  • 0 23 * * 1-5 表示周一到周五的晚上11点执行。

特殊字符

  • 逗号(,):用来指定多个时间点,如 1,15 0 * * * 表示每月的1日和15日午夜执行。
  • 连字符(-):用来表示一个时间范围,如 0 23 * * 1-5 表示每周一至周五的晚上11点执行。
  • 星号(*):表示所有可能的值,即每分钟、每小时等。
  • 正斜杠(/):用来指定步长,如 */10 * * * * 表示每隔10分钟执行一次;0 0/2 * * * 表示每两小时的整点执行。
  • 问号(?):用于日期和星期字段,表示不指定明确的值,通常用在其中一个字段已指定的情况下。
  • L:用于日期和星期字段,表示“最后”,如 L 在日期字段表示该月的最后一天,L 在星期字段表示周六(如果是五天工作制则表示周五)。
  • W:用于日期字段,表示最接近指定日期的工作日。
  • 井号(#):用于星期字段,表示“第几个”,如 6#3 表示第三个周五。

常用命令

  • crontab -l:列出当前用户的 crontab 文件内容。
  • crontab -e:编辑当前用户的 crontab 文件。
  • crontab -r:删除当前用户的 crontab 文件。
  • crontab -u user:指定操作其他用户的 crontab 文件,需要管理员权限。

注意事项

  • 每条命令执行后,系统会将输出发送到用户的邮箱,除非你重定向了输出。
  • 时间表达式应避免使用本地时间,尽量使用 UTC 时间,以防止因夏令时等原因导致的问题。
  • 检查环境变量是否正确配置,因为 crontab 中的脚本可能无法继承 shell 的环境变量。

示例

下面是一些常见的 crontab 定时任务示例:

  • 每隔两分钟打印一次 "Hello World":
1-59/2 * * * * echo "Hello World"
  • 每周五晚上11点执行备份脚本:
0 23 * * 5 /path/to/backup/script.sh
  • 每个月的第一天凌晨1点清理临时文件:
0 1 1 * * rm -f /tmp/*