Linux 系统里的 cron 守护进程,可以跟随系统启动,是一个用来创建定时任务的基本工具。
所谓定时或计划任务,指的是在某些特定的时间点自动地执行特定的命令。
这些相对应的时间点和命令可以在其配置文件Crontab
中设置。
Crontab
crontab
即 cron 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分钟 |
二、配置示例
30 1 * * * find /tmp -atime +3 -type f -exec rm -f {} ';'
每天凌晨1点半,使用find
命令查找/tmp
目录下所有3天以上没有被访问过的文件,并将它们全部删除30 2 * * 1 cd /home/joe/project; make
每天凌晨2点半,进入/home/joe/project
目录并执行make
命令