第13章 Linux系统定时任务Cron(d)服务应用实践
13.1 Cron(d)介绍
13.1.1 什么是Cron?
Cron是Linux系统中以后台进程模式周期性执行命令或指定程序任务的服务软件。默认情况下,安装完Linux操作系统之后,Cron服务软件便会启动,服务对应的进程名字为Crond,Crond服务会定期(默认每分钟检查一次)检查系统中是否有需要执行的任务工作计划。如果有,则会根据其预先设定的定时任务规则自动执行该定时任务工作。这个Crond定时任务服务就相当于我们平时使用的闹钟(或手机闹钟)。
Linux系统中的Cron定时任务执行的最快频率是每分钟执行一次,因此如果是需要以秒为单位执行的计划任务,Cron就不适用了。面对这种情况,在工作中可以编写Shell脚本,然后作为守护程序执行。以下是一个每秒钟执行一次任务的脚本:
[root@oldboy ~]# cat cron.sh while true do echo "I am oldboy teacher." sleep 1 done
提示:当然也有秒级定时任务人员,但是用途不多,因此,读者不需要过多涉及。
13.1.2 为什么要使用Crond定时任务?
前文讲解过,Linux运维工程师的职责之一就是保障数据安全,那么,其日常工作任务之一就是不断地对数据进行备份,而很多时候白天系统业务繁忙,因此数据备份的工作只能放到晚上执行,例如,网站数据库数据以及用户上传的图片、文件和程序文件等,一般需要每天晚上做一次备份。如果没有定时任务工具,管理员就得每天半夜爬起来,登录到系统中手工执行任务计划,直到执行完才能去睡觉。执行任务的过程可能会持续好几个小时,这样一来,一个晚上管理员就都不用睡觉了,这样显然是不行的。那么有什么办法可以解决这个周期性地执行任务计划的问题呢?
这就需要Linux系统的定时任务Cron工具了,Cron工具可以很好地帮我们完成需要重复的、周期性地、自动备份等运维工作。
13.1.3 不同系统的定时任务种类介绍
1.Windows系统的定时任务
在继续讲解Linux的定时任务之前,我们先来看一看Windows的任务计划,Windows系统也是有定时任务计划工具的。
这里以Windows7系统为例进行说明,选择“开始”→“所有程序”→“附件”→“系统工具”→“任务计划程序”,就会弹出如图13-1所示的窗口。
![](https://i-blog.csdnimg.cn/blog_migrate/72e97d765cd2e873345003d9b9e7f9c5.jpeg)
图13-1 Windows7的任务计划图
图13-2所示的是设定好的,每天晚上自动关机的定时任务。
![](https://i-blog.csdnimg.cn/blog_migrate/4adf698167c4ca47604f7479d19ec1d9.jpeg)
图13-2 每天晚上自动关机的设置图解
更多信息可见:http://wenku.baidu.com/view/174cb0cc2cc58bd63186bd2a.html
2.Linux系统下的定时任务软件
严格地说,Linux系统下的定时任务软件还真不少,例如,at、Cron和anacron等,下面分别来简单介绍一下。
·at定时任务软件(依赖于atd服务)适合于仅执行一次就结束的调度任务工作。例如,某天夜里需要处理一个工作任务,仅仅是这一天的夜里,对于这种突发性的工作任务,那就可以使用该软件。要使得at这个软件设定的配置生效,还需要提前启动一个名为atd的服务才行,这个工具在工作中的使用需求很少,读者简单了解一下即可。
·Cron定时任务软件依赖于Crond服务。正如前面所说,通过crontab命令可以配置周期性执行的定时任务工作计划,例如,每五分钟做一次服务器时间同步。要使得crontab命令设定的配置生效,还需要事先启动一个服务Crond才行。这个Cron工具(对应的crontab命令以及依赖的Crond服务)就是运维工程师在生产工作中最常使用的工具,请大家务必掌握。
·anacron定时任务软件主要是为非7×24小时开机的服务器准备的,anacron并不能指定具体时间执行任务工作,而是以天为周期或者在系统每次开机后执行任务工作。它会检测服务器停机期间应该执行但是并没有进行的任务工作,并将该任务执行一遍。
3.Linux系统定时任务Cron(d)
在Linux系统中,Cron是定时任务的软件名,Crond是服务进程名,而crontab命令则是用来设置定时任务规则的配置命令。
为了更好地理解和学习Cron定时任务,本书将Cron定时任务人工划分为用户定时任务计划和系统定时任务计划两类,分别阐述如下。
(1)用户定时任务计划
Crond服务在工作时会以分钟为单位查看/var/spool/cron路径下以系统用户名命名的定时任务文件,以确定是否有需要执行的任务计划。如果有,就会将定时任务调度到内存中执行,笔者将这部分文件称为用户定时任务文件,使用crontab命令编辑的文件最终都会以当前用户名作为文件名存在于/var/spool/cron路径下。
如果是系统管理员或某个普通用户定期要做的任务工作,例如每隔5分钟与互联网上的时间服务器进行一次时间同步,每天晚上0点备份网站站点数据以及数据库数据,就可以使用crontab命令配置在/var/spool/cron路径下。
(2)系统定时任务计划
Crond服务在工作时除了查看/var/spool/cron下的定时任务文件之外,还会查看/etc/cron.d目录以及/etc/anacrontab下的文件内容,里面通常是每天、每周或每月需要执行的任务,如果有需要执行的任务则会执行,系统定时任务的路径通常如下:
[root@oldboy ~]# ls -l /etc|grep cron -rw-------. 1 root root 541 Aug 24 2016 anacrontab drwxr-xr-x. 2 root root 4096 Mar 8 09:55 cron.d #<==系统定时任务的目录。 drwxr-xr-x. 2 root root 4096 Mar 8 09:55 cron.daily #<==按天轮询配置的目录。 drwxr-xr-x. 2 root root 4096 Mar 8 09:54 cron.hourly #<==按小时轮询配置的目录。 drwxr-xr-x. 2 root root 4096 Mar 8 09:55 cron.monthly #<==按月轮询配置的目录。 drwxr-xr-x. 2 root root 4096 Sep 27 2011 cron.weekly #<==按周轮询配置的目录。
特别注意:系统路径下的定时任务配置格式与前文讲解的用户定时任务的配置格式是不同的。
Crond服务除了执行用户定时任务计划(/var/spool/cron目录)以外,还会周期性地自动执行与操作系统相关的定时任务工作,例如轮询系统日志、备份系统数据、清理系统缓存等,这些任务无需我们人为干预。示例代码如下:
[oldboy@C64_x86_64 ~]$ ls -l /var/log/messages* #<==Linux系统的日志被自动轮询,以时间结尾。 -rw-------. 1 root root 470941 9月 7 09:06 /var/log/messages -rw-------. 1 root root 77868 8月 24 19:35 /var/log/messages-20130825 -rw-------. 1 root root 153778 8月 31 17:27 /var/log/messages-20130901 [oldboy@C64_x86_64 ~]$ ls -l /var/log/secure* -rw-------. 1 root root 6969 9月 7 09:07 /var/log/secure -rw-------. 1 root root 17640 8月 25 08:25 /var/log/secure-20130825 -rw-------. 1 root root 6494 9月 1 08:52 /var/log/secure-20130901
类似于上述的日志轮询工作就是由系统自身来完成的,不需要系统管理员来设置,命令如下:
[root@oldboy ~]# ll /etc/logrotate.conf /etc/cron.daily/logrotate -rwx------. 1 root root 219 Oct 31 03:12 /etc/cron.daily/logrotate #<==每天执行的日志轮询定时任务配置。 -rw-r--r--. 1 root root 662 Jul 31 2013 /etc/logrotate.conf #<==日志轮询切割 配置文件。
本章讨论的重点是Cron的用户定时任务计划内容,当然,读者也可以自行学习系统任务计划相关的内容,从而让工作中的任务计划按系统任务计划的格式执行也是可以的(此部分内容不是必须的,也不是本文讲解的重点)。
13.2 用户定时任务Cron(d)使用说明
13.2.1 crontab定时任务编辑命令语法
在Linux运维工作中,通常使用crontab命令编辑定时任务,crontab的相关参数及说明如表13-1所示。
表13-1 crontab的相关参数及说明
![](https://i-blog.csdnimg.cn/blog_migrate/87d960f328242e7fa7e18a68d7dd2a77.jpeg)
特别强调:
-i、-r参数在生产中很少使用,另外,使用crontab命令编辑的文件实际上就是在操作“/var/spool/cron/当前用户名”这样的文件。
13.2.2 使用定时任务权限及配置文件说明
表13-2所示的是定时任务软件相关文件及路径说明。
表13-2 定时任务软件相关文件及路径说明