在日常中,我们常常需要linux
系统来执行定时任务。而这时就需要我们使用crontab
命令来完成此项任务。
crontab 命令介绍
crontab
命令被用于提交和管理用户提交的需要定期执行的任务。而crontab
命令需要crond
服务支持。crond
是Linux
下用来周期地执行某种任务或等待处理某些事件的一个守护进程。在安装linux系统时,crond
一般会被自动安装。我们可以通过如下的命令查看、启动、重启crond
服务。
1 | $ service crond status # 查看crond状态 |
crontab 语法
1 | Usage: |
注意:这里的 file 指的是包含待执行任务的crontab
文件。
任务的定义
crontab
文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
其中:
- minute: 表示分钟,可以是从0到59之间的任何整数。
- hour:表示小时,可以是从0到23之间的任何整数。
- day:表示日期,可以是从1到31之间的任何整数。
- month:表示月份,可以是从1到12之间的任何整数。
- week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
- command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
注意:在定义任务时,我们可以分别以周或者是日月为单位作为循环,但我们不可使用 几月几号且为星期几 的模式工作。
下面的例子是一个错误的写法:
1 | 30 12 11 9 5 root echo "test mission" |
设置定时任务
我们可以如下的几种方式进行定时任务的设置。
- 用户定时任务:使用
crontab -e
命令
用户定时任务:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。
我们可以使用crontab -e
进入某个用户的定时任务编辑界面。如果不指定用户的话,则进入当
前用户的编辑界面。在编辑界面中,一行表示一个定时任务。如下图所示,编辑界面含有两个定时任务。
- 系统定时任务:编辑
/etc/crontab
文件
系统定时任务:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc
目录下有一个crontab文件,这个就是系统任务调度的配置文件。
首先,我们先来看看文件的内容。使用cat /etc/crontab
,内容如下。
1 | SHELL=/bin/bash |
前面四行是用来配置crond
任务运行的环境。
第一行:指定了环境所使用的shell。
第二行:指定了系统执行命令的路径。
第三行:指定了crond
的任务执行信息将通过电子邮件发送的用户,这里发给root用户。如果为空,则不发给任何人。
第四行:指定了执行命令或者脚本时的主目录。
下面的几行,则是系统执行的任务。每个任务占据一行。
注意:在这里定义任务时,需要指定用户。而用户任务则不需要。
crontab 相关配置文件
- 用户权限文件
1 | \etc\cron.deny |
使用说明:
当系统中有
/etc/cron.allow
文件时,只有写入此文件的用户可以使用crontab
命令,没有写入的用户不能使用 crontab 命令。同样,如果有此文件,/etc/cron.deny
文件会被忽略,因为/etc/cron.allow
文件的优先级更高。当系统中只有
/etc/cron.deny
文件时,写入此文件的用户不能使用crontab
命令,没有写入文件的用户可以使用crontab
命令。Linux 系统中默认只有
/etc/cron.deny
文件。
- 用户任务存放目录
1 | /etc/spool/cron/ |
说明:所有用户crontab文件存放的目录,以用户名命名。
cron.daily
、cron.hourly
、cron.weekly
和cron.monthly
目录
1 | /etc/cron.daily/ |
说明:在四个文件夹里面存放了crond
按天、小时、周和月执行的脚本。
解释:
看一下 anacrontab
这个配置文件中的代码:
1 | # /etc/anacrontab: configuration file for anacron |
在系统启动时会读取一次 anacrontab
中的配置参数。
这里以每天举例。在读取完成 anacrontab
文件后,crond
程序会在每天的 4点12分 左右执行一次 cron.daily
下的文件。