6.2、Linux crond 计划任务服务(CentOS 7)【定时任务,定时命令,周期执行】

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

  1. crond调用cron.d目录所有文件,该目录默认存在0hourly文件。
  2. 0hourly存在命令 01 * * * * root run-parts /etc/cron.hourly ,即每小时的01分执行cron.hourly目录下的所有文件。该目录下默认存在0anacron文件
  3. 0anacron存在命令 /usr/sbin/anacron -s ,anacron命令执行是根据/etc/anacrontab文件内容执行的。
  4. /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文件下写入当前时间
#分 时 日 月 周 命令
发布了129 篇原创文章 · 获赞 20 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/Bof_jangle/article/details/101027272