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命令