rhel中定时任务cron解析

cron

cron是一个工具名字,它的作用就是根据一定的时间策略,执行你指定的脚本,跟windows下的定时任务是一样的。

它对应的守护进程为crond,是被当做服务在开机的时候启动。

所以,cron可以使用服务管理命令,比如service,chkconfig来进行管理。

具体使用可参考:

http://blog.csdn.net/jx_jy/article/details/13289217

配置文件

crond进程每一分钟被唤醒一次,读入自己的配置文件,根据配置文件中设定的策略执行脚本任务,cron的配置文件有两个位置

/etc/crontab

/var/spool/cron

首先看下/etc/crontab文件的内容

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

前四行的变量定义部分就不说了,指定PATH,SHELL等。

最后四行就是要执行的任务和执行该任务的策略。

具体格式为

1、分(1-60)  * 表示所有,例如2-10指只有每小时的第2分到第10分才执行该任务,还可以使用分号2-10/2,后面的2表示间隔两分钟执行一次,若想间隔3分钟,把2改成3就行了,后面列的时、天,月,星期的设定格式都符合此语法。

2、时(1-24)

3、天(1-30)  这里每个月的天并非自然月一样,存在31天28天什么的,它的范围就是1-30。

4、月(1-12)

5、星期(0-6) 0表示周日

6、执行该脚本的用户

7、执行选项            如果需要执行某个文件夹下面所有的脚本,需要使用run-parts参数,如果后面是指定一个具体脚本,这个地方可为空。

8、要执行的脚本,或脚本所在目录

从上面你也可以看出,系统预定义了一些路径在指定的路径下,比如/etc/cron.hourly下面的脚本会在每小时的第一分钟执行一次。/etc/daily下的脚本会在每天的4时02分执行。

所以,若果你想增加自己的定时任务,也可以直接在这个crontab文件中增加一行,也可以按照系统预定策略,把你的脚本放在合适的文件夹下面。

再看下另外的一个配置文件

/etc/spool/cron/

在这个目录下,每个现在有定时任务的用户都有一个以自己名字命名的文件,我们打开一个文件看看内容。

[[email protected] cron]# pwd
/var/spool/cron
[[email protected] cron]# ll
总计 8
-rw------- 1 root root 48 12-14 13:34 oracle
-rw------- 1 root root 48 12-14 13:33 root
[[email protected] cron]# cat root
18-23/2 * * * * /home/oracle/shell/test_cron.sh

我们可以看最后一个root用户下的文件内容。

对比上面crontab文件的内容,我们发现,它只是少了指定用户的部分,解析下上面定时任务为

每小时的18分到23分钟之间,每2分钟执行一次/home/oracle/shell/test_cron.sh脚本。

这里我做了一个小小的没有太大意义的实验,就是在同一个文件夹下面的脚本的执行顺序改如何制定,实验结果证明是执行结果是跟ls查看的顺序一致的,可能这也是rc0n.d目录下的脚本都作了以数字开头决定顺序的原理。如果你多个脚本有依赖关系,最好使用脚本调用解决。

cron的配置命令crontab

crontab命令是你配置定时任务的专用命令,除了root用户,比如oracle这些用户对/etc/crontab这些配置文件是没有更改权限的,甚至连/var/spool/cron目录都进不去。

所以就需要借助crontab命令,这个命令很简单

-u   oracle  后面加用户名,表示对特定用户进行配置查询,如果没有这个参数,则对当前用户进行配置查询

-l    显示用户下的定时任务

-e   编辑用户的定时任务,其实就是打开vi编辑器,增删改相应条目

-r   删除用户的所有定时任务

举个例子:查看oracle下的定时任务  crontab -u oracle -l

编辑oracle下的定时任务  crontab -u oracle -e

删除oracle的所有定时任务    crontab -r

此外,这个crontab命令只查询/var/spool/cron目录下该用户文件的内容,而不会查询/etc/crontab的内容。所以,检查用户定时任务的时候需要细致些。

cron的辅助工具anacrond

从cron的时间策略可以看出来,它执行定时任务是在特定时间点执行的,比如凌晨4点02分,如果你的机器不是24小时开机,或者正好4点到5点故障关机。那么这一天的定时任务就没法执行了,所以,anacron就是为了弥补cron的这个弱点的。

实际上,anacron只有一个配置文件/etc/anacrontab,首先我们来看下它的内容

[[email protected] etc]# pwd
/etc
[[email protected] etc]# cat anacrontab
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

1       65	cron.daily		run-parts /etc/cron.daily
7	70	cron.weekly		run-parts /etc/cron.weekly
30	75	cron.monthly		run-parts /etc/cron.monthly

前几行就不说了,我们看看最后3行。还是按列说明

1、间隔,单位是天

2、延迟执行时间,单位是分钟

3、执行任务标示 ,就是起个名字,自定义的

4、执行的脚本,这个地方还是使用了run-parts,很明显这是执行这个文件夹下的所有内容,跟cron一样

那么它是如何工作的呢。

首先,它在/var/spool/anacron/目录下,针对每一行任务建立并维护了一个文件,这个文件存储的就是该计划任务最后被执行的时间戳,内容类如

[[email protected] anacron]# cat cron.daily
20141214

就是一个日期。经过我的测试,这个文件中的时间错由crond和anacrond两个进程共同维护,也可能crond每次执行的时候通知anacrond然后通过anacrond进行维护,总之,如果crond或者anacrond执行了cron.daily目录的内容,这个文件中的时间戳都会更新。

而且,是在执行计划开始前就更新了,所以,如果你中间还没有把所有脚本执行完就执行了关机操作,开机之后这个时间戳还是被更新过了。

所以,整个执行过程大概是这个样子的

开机启动后,anacrond进程查看存在/var/spool/anacron/目录下的事件戳,对比/etc/anacrontab中的配置策略,比如第一条,如果当前时间比文件中记录事件超过了1天。那么anacrond进程将会在65分钟之后,执行后面的定时任务并更新时间戳文件。

时间: 2024-10-06 14:47:23

rhel中定时任务cron解析的相关文章

Linux中定时任务cron简介

1.1 特殊权限u+s /o+t [[email protected] ~]# ls -ld /bin/ls /usr/bin/passwd /tmp/ /usr/bin/locate -rwxr-xr-x. 1 root root 117048 Mar 23 2017 /bin/ls drwxrwxrwt. 3 root root 4096 Jul 25 16:27 /tmp/ -rwx--s--x. 1 root slocate 38464 Mar 12 2015 /usr/bin/loca

将定时任务cron 解析成中文

在使用定时器 quartz 时,其中的cron 表达式,老板表示作为开发的你能看懂外,其他的非开发同事可能看不懂,要用一个他们能看懂的方式表达出来. 还好我们的项目要求的表达式不是特别的麻烦,所以就写了一个简略的转换为中文的方法 package com.common.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.u

linux定时任务cron配置[转]

实现linux定时任务有:cron.anacron.at等,这里主要介绍cron服务. 名词解释: cron是服务名称,crond是后台进程,crontab则是定制好的计划任务表. 软件包安装: 要使用cron服务,先要安装vixie-cron软件包和crontabs软件包,两个软件包作用如下: vixie-cron软件包是cron的主程序.crontabs软件包是用来安装.卸装.或列举用来驱动 cron 守护进程的表格的程序. 查看是否安装了cron软件包: rpm -qa|grep vixi

转:在java中使用dom4j解析xml

在java中使用dom4j解析xml 虽然Java中已经有了Dom和Sax这两种标准解析方式 但其操作起来并不轻松,对于我这么一个初学者来说,其中部分代码是活生生的恶心 为此,伟大的第三方开发组开发出了Jdom和Dom4j等工具 鉴于目前的趋势,我们这里来讲讲Dom4j的基本用法,不涉及递归等复杂操作 Dom4j的用法很多,官网上的示例有那么点儿晦涩,这里就不写了 首先我们需要出创建一个xml文档,然后才能对其解析 xml文档: <?xml version="1.0" encod

HTTP1.1中CHUNKED编码解析(转载)

HTTP1.1中CHUNKED编码解析 一般HTTP通信时,会使用Content-Length头信息性来通知用户代理(通常意义上是浏览器)服务器发送的文档内容长度,该头信息定义于HTTP1.0协议RFC  1945  10.4章节中.浏览器接收到此头信息后,接受完Content-Length中定义的长度字节后开始解析页面,但如果服务端有部分数据延迟发送吗,则会出现浏览器白屏,造成比较糟糕的用户体验. 解决方案是在HTTP1.1协议中,RFC  2616中14.41章节中定义的Transfer-E

Android中XML数据解析

转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38296207 XML初步 今天我们来学习另一种非常重要的数据交换格式-XML.XML(Extensible Markup Language的缩写,意为可扩展的标记语言),它是一种元标记语言,即定义了用于定义其他特定领域有关语义的.结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识.XML 文档定义方式有:文档类型定义(DTD)和XML Schema.DTD定义了文

Android中使用Gson解析JSON数据的两种方法

Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下 Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组

Caffe中的损失函数解析

Caffe中的损失函数解析 导言 在有监督的机器学习中,需要有标签数据,与此同时,也需要有对应的损失函数(Loss Function). 在Caffe中,目前已经实现了一些损失函数,包括最常见的L2损失函数,对比损失函数,信息增益损失函数等等.在这里做一个笔记,归纳总结Caffe中用到的不同的损失函数,以及分析它们各自适合的使用场景. 欧式距离损失函数(Euclidean Loss) 输入: 预测的值: y ^ ∈[?∞,+∞] , 其中,它们的形状为:N×C×H×W 标签的值: y∈[?∞,+

第66讲:Scala并发编程实战初体验及其在Spark源码中的应用解析

王家林亲授<DT大数据梦工厂>大数据实战视频“Scala深入浅出实战经典”视频.音频和PPT下载!第66讲:Scala并发编程实战初体验及其在Spark源码中的应用解析百度云:http://pan.baidu.com/s/1pJ5jzHx腾讯微云:http://url.cn/aSawrm360云盘:http://yunpan.cn/cctL3QYACaVNa  访问密码 c0fb 信息来源于 DT大数据梦工厂微信公众账号:DT_Spark