crontab:这个命令可以周期性的执行任务工作,例如:每五分钟做一次服务器时间同步。要执行crontab这个命令,也需要启动一个服务crond才行,这个crontab命令是生产工作中常用到的命令。

● anacron: 这个命令主要用于非7*24小时开机的服务器准备的,anacron并不能指定具体时间执行任务工作,而是以天为周期或者在系统每次开机后执行的任务工作,它会检测服务器停机期间应该执行但没有进行的任务工作,并将该任务执行一遍。

提示:

  1. 我们所说的crond服务是运行的程序,而crontab命令让用户用来设置定时规则的命令。

2、crrond是企业生产工作中常用的重要服务,at和anacron很少使用,可以忽略。

查看linux定时任务ctond服务是否开启,默认情况下,crond服务是开启的状态。
[root@kali ~]# chkconfig|grep "crond"
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off

如果未开启可执行以下命令开启
[root@kali ~]# chkconfig crond on
[root@kali ~]# chkconfig|grep "crond"
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off

1.1 定时任务使用说明:

命令格式:
crontab [-u user] file
crontab [-u user] [ -e | -l -r ]
指令选项说明含义表:

参数 含义
-l(字母) 列出当前在执行的任务(查看crontab文件内容),list的缩写
-e 编辑crontab文件内容,e 可理解为edit的缩写
-i 删除crontab文件内容,删除前会提示确认。用的很少
-r 删除crontab文件内容。用的很少
-u 指定以某个用户身份执行

特别强调:
-i,-r参数在生产中很少用,没什么需求必须要用-e进去编辑即可。
补充:crontab { -l | -e }实际上就是在操作/var/spool/cron/当前用户这样的文件。

1.2 使用者权限及定时任务文件

文件 说明
/etc/cron.deny 该文件中所列用户不允许使用crontab命令
/etc/cron.allow 改文件中所列用户允许使用crontab命令。
/var/spool/cron 所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名。

1.3 定时任务指令格式

用户的定时任务规则一般分为6个段(每个段通过空格来分割,系统的定时任务为/etc/crontab,分7个段,空格来分割),前五段位时间的设定段,第六段为所要执行的命令或脚本任务段。
基本格式如下:
用户定时任务:
01 cmd
02 4 * cmd
22 4 0 cmd
42 4 1 cmd
提示:
cmd为要执行的命令或脚本,例如/bin/sh /server/scripts/oldboy.sh

crontab语法格式中时间段的含义如下:
# For details see man 4 crontabs

Example of job definition:
# .———————— minute (0 - 59)
# | .——————- hour (0 - 23)
# | | .————— day of month (1 - 31)
# | | | .———- month (1 - 12) OR jan,feb,mar,apr …
# | | | | .—— day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * user-name command to be executed
分 时 日 月 周

提示:时间记忆口诀:分时日月周。取值范围记忆:正常日期时间范围。

1.4 crontab语法格式中特殊符号含义表

特殊符号 含义
* 号表示任意时间,实际就是“每”的意思。
例如:00 23
cmd 表示每月每周每日的23:00执行cmd任务。需要注意的是:每个小时为上的表示每,如果为上是就是该位上时间的取值范围,例如:小时上的*等价于00 -23。
- 减号,表示分隔符,表示一个时间范围,区间段,如 17-19点,每天的17,18,19的00分执行任务。00 17-19 * cmd。就是 17,18,19点整分别执行的意思。
, 逗号,表示分割时间段的意思。30 17,18,19 * /bin/sh /scripts/oldboy.sh 表示每天17、18、和19点的半点时刻执行/scripts/oldboy.sh脚本。也可以和“-”结合使用,例如:30 3-5,17-19 */bin/sh /scripts/oldboy.sh
/n n代表数字,即 “每个n单位时间”,例如:每10分钟执行一次任务可以写成 /10 cmd,其中, /10,*的范围是0-59,因此,也可以写成0-59/10。

1.5 定时任务案例

a、30 3,12 * * * /bin/sh /scripts/oldboy.sh
在本例中,第一列为30,表示30分钟,第二列为3,12,这代表3点及12点,此定时任务的意思是每天凌晨3点和中午12点的半点时刻(或描述为每天凌晨3:30和中午12:30)执行/scripts/oldboy.sh脚本
b、30 */6 * * * /bin/sh /scripts/oldboy.sh
在本例中,第一列为30,表示30分钟,第二列*/6代表每6个小时,也相当于6,12,18,24的作用。此定时任务的意思是每隔6个小时的半点时刻执行/scripts/oldboy.sh脚本任务。

c、 30 8-18/2 * * * /bin/sh /scripts/oldboy.sh
在本例中,其中的第一列为30,表示30分钟,第二列8-18/2代表在 早晨8点到下午18点之间 每隔2小时的半点时刻执行/scripts/oldboy.sh脚本任务。

d、30 21 * * * /application/apache/bin/apachectl graceful
上面的例子表示每晚的21:30重启apache

e、45 4 1,10,22 * * /application/apache/bin/apachectl graceful
上面的例子表示每月1、10、22日的凌晨4:45分重启apache。

f、10 1 * * 6,0 /application/apache/bin/apachectl graceful
上面的例子表示每周六、周日凌晨1:10分重启apache

g、0,30 18-23 * * * /application/apache/bin/apachectl graceful
每天的18点到23点之间,每整点和每半点执行apache重启。
提示:最后一次执行任务的时间是23:30分

h、00 */1 * * * /application/apache/bin/apachectl graceful
上面的例子表示每隔1个小时整点重启apache

j、* 23,00-7/1 * * * /application/apache/bin/apachectl graceful
上面的例子并不表示晚上23点和早上0-7点之间每隔一小时重启apache。
以上的定时任务第一列为*,表示每分钟都执行任务即晚上23点和早上0-7点之间每隔一小时的每分钟都重启apache

k、00 11 * 4 1-3 /application/apache/bin/apachectl graceful
上面的列子表示4月的每周一到周三的上午11点整重启apache

强调:周和日尽量不要同时用,否则可能达不到想要的效果。