CentOS 7中由cronie软件提供,在系统中由crond守护进程执行
一、cron的工作过程及相关目录:
1.1、crond启动后,每分钟加载配置文件:/etc/crontab 、 /etc/anacrontab 2个文件 和/etc/cron.d/* /var/spool/cron/* 2个目录下的所有文件
图1
- /etc/crontab 文件和 /etc/cron.d/* 、 /var/spool/cron/* 目录下的文件由crond直接加载执行。
- /etc/anacrontab 是由cron 调用 anacron命令执行的配置文件。间接为cron服务。
1.2、crontabs软件包提供 run-parts命令和 4个配置文件目录:/etc/cron.{hourly,daily,weekly,monthly}.
图2
- 这4个目录是存放定时执行的任务的。cron.hourly由cron直接执行, 其余cron.{daily,weekly,monthly}由cron调用anacron间接执行。(其间接过程如图1和图2描述)
1.3、总体目录及调用过程如下图3所示:
图3
- crond调用cron.d目录所有文件,该目录默认存在0hourly文件。
- 0hourly存在命令 01 * * * * root run-parts /etc/cron.hourly ,即每小时的01分执行cron.hourly目录下的所有文件。该目录下默认存在0anacron文件
- 0anacron存在命令 /usr/sbin/anacron -s ,anacron命令执行是根据/etc/anacrontab文件内容执行的。
- /etc/anacrontab存在命令 1 5 cron.daily nice run-parts /etc/cron.daily ,即每隔1天(延迟5分钟)执行 nice run-parts /etc/cron.daily命令。 该run-parts 命令的释义即执行指定目录下的所有可执行文件。(weekly和monthly类似。)
小结:
需要周期性执行的文件,直接放入/etc/cron.{hourly,daily,weekly,monthly}对应的目录即可。(当然也可以修改anacrontab配置增加其他周期(如2周一次)的计划任务。)
如需按照自定义规则执行的,则可在/etc/cron.d目录下创建对应的文件,并编写crontab格式的文件即可。(推荐方式,便于管理)
(修正:分 时 日 月 周)
图 :crontab格式说明(每分钟 username用户 执行 commands命令)
二、cron和anacron的区别。
即cron.d目录下crontab格式文件写的定时计划 与 由anacron执行的/etc/cron.{hourly,daily,weekly,monthly}等目录下的周期计划的区别。
- cron假定为24*7全天候允许的,如果关机或者修改时间而跳过了指定的时间(如 01 * * * * 每小时的01分执行,而机器在00-10分的时候重启了),那么该任务会被遗漏。
- anacron则不会。因为anacron会在/var/spool/anacron目录中保留时间戳文件,也就是执行会被记录下来,如果没记录,则认为任务没有被执行过,关机&重启后,依然会被执行。
三、其他用户安排自己的cron任务(定时任务、计划任务)
crontab [-l|-r|-e]
#l查看、r删除、e编辑
每个用户可以设置自己的cron任务(有权限的情况)。普通用户使用crontab [-l|-r|-e] 。 l查看、r删除、e编辑自己的计划任务。
该编辑内容使用vi编辑器,其操作与文件编辑一样(其实就是编辑文件,该文件在/var/spool/cron/目录下(root的访问权限))
内容格式应该如下:
00 * * * * echo `date` >> ~/jFile
#每小时在jFile文件下写入当前时间
#分 时 日 月 周 命令