Linux 使用 crontab 创建定时任务

Linux 系统里的 cron 守护进程,可以跟随系统启动,是一个用来创建定时任务的基本工具。
所谓定时或计划任务,指的是在某些特定的时间点自动地执行特定的命令
这些相对应的时间点和命令可以在其配置文件 Crontab 中设置。

Crontab

crontabcron table 的缩写,是 cron 程序的配置文件。其中包含了对每一条计划任务的具体配置。
可以在命令行中使用 crontab -e 命令对该配置文件进行编辑。

使用限制
  • 只有当用户的账号出现在 /usr/lib/cron/cron.allow 文件中时,该用户才可以使用 crontab 命令
  • /usr/lib/cron/cron.allow 文件不存在,而用户的账号没有出现在 /usr/lib/cron/cron.deny 文件中,该用户可以使用 crontab 命令
  • 当只存在 cron.deny 文件且该文件内容不为空,则系统中所有用户都可以使用 crontab
  • 两个文件都不存在时,则只有 root 用户可以访问 crontab
命令选项
  • crontab filename 从 filename 文件中导入配置,并替代之前的内容
  • crontab -e 编辑配置文件 crontab 的内容,定义计划任务
  • crontab -l 列出当前用户已经定义好的计划任务
  • crontab -r 移除当前用户的 crontab 配置文件(删除该用户所有的计划任务)
    配置文件格式
    crontab 配置文件中的每一行内容都代表了对某个计划的定义,一共分成 6 个字段。前 5 个字段定义时间,最后一个字段表明执行的命令。具体如下:
    minute hour day month weekday command

各时间字段的含义和取值范围如下:

字段 描述 取值范围
minute 具体某分钟 0 到 59
hour 具体某小时 0 到 23
day 一个月内的某天 1 到 31
month 具体某个月份 1 到 12
weekday 一周内的某天 0 到 6(0=周日)

时间字段的合法格式:

  • 单独的数字(n):表示当前时间单位下某个特定的时间点
  • - 连接的两个数字(n1-n2):表示当前时间单位下的某个时间范围
  • 由逗号分隔的多个数字或范围(n1,n2,n3...):表示当前时间单位下多个时间点(段)
  • 星号(*):表示当前时间范围下的所有时间点(段)
  • 时间范围和步长(n1-n2/n):表示在某个时间范围内,每隔一段固定的时长,执行一次特定的命令

如:

minute hour day/month month day/week 任务执行时间
30 9 14 3 * 每年3月14号的上午9点30分
0 2 * * 6 每个周六的凌晨2点整
45 8 * * 1-5 每周一到周五的上午8点45分
0 0 1,15 * * 每个月1号或15号半夜0点
0 * 13 * 5 每个月13号的整点,或者每个周五的整点
*/10 * * * * 每隔10分钟

二、配置示例

  1. 30 1 * * * find /tmp -atime +3 -type f -exec rm -f {} ';'
    每天凌晨1点半,使用 find 命令查找 /tmp 目录下所有3天以上没有被访问过的文件,并将它们全部删除
  2. 30 2 * * 1 cd /home/joe/project; make
    每天凌晨2点半,进入 /home/joe/project 目录并执行 make 命令