linux周期性计划命令设置例⼦,周期性计划任务Cron详解
概述
cron是Linux或者类Unix系统的作业调度程序。利⽤它,我们可以配置某些命令或者脚本,让命令和脚本在某个设定的时间内周期性地运⾏。本⽂主要以描述了 CentOS 6的cron命令的详细知识。
了解cron组件
cron程序由程序包cronie提供,我们可以通过rpm -qi cronie查看cronie的信息。
cron 的组件包括:
1.守护进程本⾝(crond);
所谓守护进程,即是不间断运⾏在后台的进程,它随时监听⽤户的请求,并随时响应并予以执⾏⽤户的作业。crond的最⼩周期单位是1分钟/次。
2. ⼀个⽤来添加、修改和删除⽤户配置⽂件的实⽤程序;
cron程序主要通过crontab 命令管理cron作业。⼀般来说,cron 配置⽂件或 cron 作业的列表被称为 crontab 或 cron 时间表。为了避免混淆,本⽂将命令和作业分别以crontab 命令和crontab 作以区分。
虽然我们可以直接编辑配置⽂件,但限于crontab有固定格式,所以不建议⽤⽂本编辑器进⾏直接编辑。⽽应该使⽤ crontab 命令进⾏管理计划任务。
3. ⼀组系统范围的配置⽂件;
我们可以在三个位置定义与系统相关的 crontab 作业:/etc/crontab、/etc/cron.d 中的任何⽂件以及特殊⽬录 /etc/cron.hourly、
/etc/cron.daily、/etc/cron.weekly 和 /hly。主要的系统crontab是/etc/crontab。这个⽂件有独特的语法(在下⼀节中讨论),其中定义的每个作业根据它⾃⼰的时间表(⽐如每⼩时两次或每天⼀次)作为指定的⽤户运⾏。使⽤ /etc/crontab 调度各种管理和维护任务。
还
可以在 /etc/cron.d ⽬录中维护⼀组 crontab。通过创建crontab,按照逻辑对属于某⼀⼦系统的命令进⾏分组。/etc/cron.d
中的⽂件采⽤与 /etc/crontab 相同的语法,每个作业按照⾃⼰的时间表并作为特定的⽤户运⾏。
还可以把shell 脚本直接放在
/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 或 /hly
⽬录中,实现每⼩时、每天、每周或每⽉运⾏此脚本⼀次。放在这⾥的脚本作为超级⽤户运⾏。
4. ⼀组针对特定⽤户的配置⽂件;
针对⽤户的 crontab 集合通常放在 /var/spool/cron/ 中,通常以⽤户名做为⽂件名存放。同样的,建议使⽤crontab命令创建
crontab 并提交⽂件。
5. ⼀个简单的访问控制设施。
分别使⽤访问控制⽂件 /etc/cron.allow 和 /etc/cron.deny 允许或拒绝⽤户访问 cron。例如,如果某个⽤户的作业可能会破坏系统的正常操作,就可以拒绝他访问 cron。
crontab作业
crontab 是⼀个⽂本⽂件。它可以包含四种代码⾏:空⾏、注释、环境变量设置和作业命令。
linuxshell脚本怎么运行空⾏和注释
⽂件中的空⾏和多余的空格被忽略。空⾏和空格有助于提⾼ crontab 的可读性,使 crontab 组织有序。
还可以使⽤注释对每个作业的时间表和⽤途加以说明。要想创建注释,只需在⼀⾏的开头加上⼀个井号(#)。
环境变量设置
cron 最终使⽤⼀个 shell 执⾏每个命令。可以通过环境变量修改或定制 shell 的⾏为。
在 crontab 中很容易设置 shell 环境变量。只需输⼊ VARIABLE=value,把 VARIABLE 替换为变量名,把 value 替换为⼀个值。
cron 预定义了4个环境变量:
PATH 的默认值是 /sbin:/bin:/usr/sbin:/usr/bin。
SHELL 预设置为 /bin/bash。
HOME 设置为 crontab 所有者的主⽬录,⽐如 /home/joe。
MAILTO 执⾏结果邮件发送给MAILTO指定的⽤户。
要想修改这些默认值或设置任何变量,只需在 crontab 中设置适当的环境变量。
注意:crontab的任务环境PATH与⽤户登录的PATH很多时候不完全相同,所以编写crontab执⾏命令或脚本时,建议使⽤命令的绝对路径;也可以修改crontab的PATH变量。
作业命令
crontab的作业命令由单⾏固定格式的⽂本构成。⼀般可以分为3个部分:
执⾏频率,定义周期性时间;以空格
分隔的5个字段,分别代表:分钟,⼩时,⽇期,⽉份,周。
crontab所有者,运⾏任务的⽤户⾝份;系统级crontab必须有此字段,⽤户级(/var/spool/cron/*)的crontab则⽆需此字段。因此,是否有⽤户名是系统 crontab 和⽤户 crontab 之间的惟⼀差异。
执⾏命令或脚本。
crontab执⾏频率⽀持多种设置,可以灵活的允许以多种⽅式运⾏作业,⽐如每分钟或在特定⽇期的特定时间。
表1. cron 作业执⾏频率选项位置字段值说明1分钟0-59
2⼩时0-230到23的24⼩时计时法
3⽇期1-31与分和⼩时不同,⽉中⽇不是从0开始的。
4⽉份1-12⽉份也不是从0开始的。也可以使⽤⽉份英⽂名的前三个字母,⽐如 jan 或 may。
5周0-70和7 都代表星期⽇。还可以使⽤英⽂名称的前三个字母,⽐如 sun、mon、
注意:
A.⼀般定义了具体的⽉和⽇后,不建议定义周,例如:* * 1 2 3,表⽰2⽉1⽇并且是周3的每分钟,符合条件的那⼀天也许百年不遇;
B.定义了具体⽇期和周,则是或关系,例如:* * 1 * 3,表⽰每个⽉的1⽇或者每个⽉的周三
表2. crontab每个时间字段表⽰法:序号值说明
1N特定值,给定时间点邮箱取值范围内的值。(N表⽰数字)
2*给定时间点上有效取值范围内的所有值,表⽰为“每...”
3,离散取值
4-连续取值
5/在指定时间范围上,定义步长
我们通过以下⽰例说明周期表⽰法:
表3. ⽰例说明分⼩时⽇期⽉份周说明
*****每分钟执⾏
01151,3,5,7,9,11*在 1、3、5、7、9 和 11 ⽉的 15 ⽇的 运⾏命令。在指定列表时,不要在逗号后⾯加空格。
0-59/15****每 15 分钟运⾏命令⼀次。0-59/15等同于*/15
30***wed,fri星期三和星期五每⼩时的 30 分时执⾏命令⼀次。(在列表中可以使⽤⽇和⽉份的名称,但是在范围中不可以)。
0,300-5,17-23***在(0点-5点, 以及 17点-23点之间)整点时和 30 分时运⾏命令。
0011*在每年 1 ⽉ 1 ⽇0:00执⾏命令⼀次。
00**0在每个星期⽇午夜运⾏命令。这相当于每周⼀次。
30010,20,30*6每星期六和每⽉的 10、20 和 30 ⽇(⼆⽉除外)的 00:30 运⾏命令。
前⾯提到crond的最⼩周期单位是1分钟/次。如果我们需要运⾏的周期是以秒或更⼩单位时候,要怎么办呢?
这⾥建议⽅法是:以脚本编写执⾏命令,通过循环语句,配合sleep、usleep,达到秒级甚⾄的周期性任务任务。
crontab命令
crontab命令本质上是调⽤⽂本编辑器进⾏编辑 crontab ,并在修改保存时进⾏语法格式检查。
crontab的语法格式crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
crontab的常⽤选项-e 编辑⽤户的 crontab;
-l 列出⽤户的 crontab;
-r 删除⽤户的 crontab;
crontab命令使⽤受权限控制。
crontab权限管理
cront通过/etc/cront.{allow,deny}两个⽂件,进⾏权限管理,控制⽤户是否能执⾏cront任务:
/etc/cront.allow 存在,则/etc/cront.deny不⽣效,只有⽂件定义的使⽤者才能使⽤crontab 命令,没有在这个⽂件中的使⽤者则不能使⽤,即使没有写在cront.deny 当中;
/etc/cront.allow 不存在, /etc/cront.deny ⽣效, cront.deny⽂件定义的使⽤者不能使⽤ cront ,⽽没有在这个 cront.deny ⽂件中的使⽤者则可使⽤crontab 命令;
如果两个⽂件都不存在,只有 root 可以使⽤crontab 命令。
即⽩名单优先管理权限,默认没有/etc/cron.allow⽂件,只要创建,仅列出的允许,其他都拒绝
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论