创建周期性任务 cron
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建周期性任务 cron相关的知识,希望对你有一定的参考价值。
参考技术A 本篇中主要从具体的实例中说明怎样创建计划任务1,周期性任务计划:cron
(1)相关的程序包:默认已安装
使用 rpm –qi cronie 查看相关包具体信息
cronie: 主程序包,提供crond守护进程及相关辅助工具
cronie-anacron: cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行
(2)计划周期性执行的任务提交给crond,到指定时间会自动运行
系统cron任务:系统维护作业
(3)要确保crond守护处于运行状态:查看crond服务是否启动
CentOS 7:
systemctl status crond 查看是否启动
systemctl start crond 启动方法
CentOS 6:
service crond status查看是否启动
service crond start启动方法
(4)系统cron任务:系统维护作业
/etc/crontab 将计划任务写入该文件
用户cron任务:
crontab命令 使用crontab命令创建
(5)日志: /var/log/cron 监控计划任务
2.系统计划任务
(1)查看任务 vim /etc/crontab
示例:每隔10分钟执行一次磁盘空间检查和磁盘节点号检查,一旦发现任何分区利用率大于80就执行wall警报
1、解释:第1位 */10 表示每10分钟执行一次(注意,*/#这里#仅限能被60 整除的数,如 */12 表示每12分执行一次)
第2位* 小时,*代表每个小时都要执行,2代表凌晨两点执行,20代表晚上8点执行(24小时制)
第3位*日,*代表每天执行,4 表示每月4号执行。20代表每月20号执行(1-31天)
第4位*月,*代表每月都执行,1代表一月,2代表2月 (1-12月)
第5位*星期几,*代表任意一天,1表示星期一,(0-7,0和都表示星期日)
第6位root 表示执行人是root
第7位/root/bin 执行的操作,可以是一条命令,也可以是脚本名称,注意这里写上完整的路径。
2.脚本示范
注意:(1)没有被重定向的输出会被邮寄给用户
(2)根用户root能够修改其它用户的作业
(3)运行结果的标准输出和错误以邮件通知给相关用户
执行的命令结果最好导入垃圾桶中
COMMAND &> /dev/null
(4)对于cron任务来讲, %有特殊用途;如果在命令中要使用%,则需要转义,将%放置于单引号中,则可不用转义
建议将执行的操作写入脚本中,不要直接写在/etc/crontab中
(5)命令在写入脚本或者/etc/crontab之前,建议先做测试
(6)这里写完脚本后要把脚本加上执行权限,chmod +x checkdisk.sh(脚本名)
3.用户周期性任务
(1)用户cron:
crontab命令定义,每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME
crontab命令:本身有suid 权限
crontab [-u user] [-l | -r | -e] [-i]
-l: 列出所有任务;
-e: 编辑任务;
* * * * * wall I am
-r: 移除所有任务;
-i:同-r一同使用,以交互式模式移除指定任务
-u user: 仅root可运行,指定用户管理cron任务
crontab –e –u mage
(2)例子1:普通用户liyi 每分钟广播一次hello
切换到liyi 用户下 su – liyi
切换到root用户下,exit,进入/var/spool/cron/ ,可以看到guan用户创建的任务,当然root用户可以修改和删除普通用户的计划任务。
4.控制用户执行计划任务
控制用户执行计划任务: /etc/cron.allow,deny
白名单: /etc/cron.allow 默认不存在,只有该文件中的用户才能执行crontab命令
黑名单:/etc/cron.deny 默认存在,拒绝该文件中用户执行crontab命令, 而没有在cron.deny 文件中的使用者则可执行
如果两个文件都不存在,只有root 可以执行 crontab 命令
解释:先看/etc/cron.allow文件,如果有,则只看/etc/cron.allow文件,只有/etc/cron.allow中的用户才能执行,如果没有该文件,则查看/etc/cron.deny文件。除/etc/cron.deny中的用户之外的用户都可以创建cron任务,如果两个文件都不存在,则仅root可以创建cron任务。
周期性计划任务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 和 /etc/cron.monthly。
主要的系统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 或 /etc/cron.monthly 目录中,实现每小时、每天、每周或每月运行此脚本一次。放在这里的脚本作为超级用户运行。
4. 一组针对特定用户的配置文件;
针对用户的 crontab 集合通常放在 /var/spool/cron/ 中,通常以用户名做为文件名存放。同样的,建议使用 crontab命令 创建
crontab 并提交文件。
5. 一个简单的访问控制设施。
分别使用访问控制文件 /etc/cron.allow 和 /etc/cron.deny 允许或拒绝用户访问 cron。例如,如果某个用户的作业可能会破坏系统的正常操作,就可以拒绝他访问 cron。
crontab作业
crontab 是一个文本文件。它可以包含四种代码行:空行、注释、环境变量设置和作业命令。
空行和注释
文件中的空行和多余的空格被忽略。空行和空格有助于提高 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-23 | 0到23的24小时计时法 |
3 | 日期 | 1-31 | 与分和小时不同,月中日不是从0开始的。 |
4 | 月份 | 1-12 | 月份也不是从0开始的。也可以使用月份英文名的前三个字母,比如 jan 或 may。 |
5 | 周 | 0-7 | 0和7 都代表星期日。还可以使用英文名称的前三个字母,比如 sun、mon、tue... 注意: A.一般定义了具体的月和日后,不建议定义周,例如:* * 1 2 3,表示2月1日并且是周3的每分钟,符合条件的那一天也许百年不遇; B.定义了具体日期和周,则是或关系,例如:* * 1 * 3,表示每个月的1日或者每个月的周三 |
表2. crontab每个时间字段表示法:
序号 | 值 | 说明 |
1 | N | 特定值,给定时间点邮箱取值范围内的值。(N表示数字) |
2 | * | 给定时间点上有效取值范围内的所有值,表示为“每...” |
3 | , | 离散取值 |
4 | - | 连续取值 |
5 | / | 在指定时间范围上,定义步长 |
我们通过以下示例说明周期表示法:
表3. 示例说明
分 | 小时 | 日期 | 月份 | 周 | 说明 |
* | * | * | * | * | 每分钟执行 |
0 | 1 | 15 | 1,3,5,7,9,11 | * | 在 1、3、5、7、9 和 11 月的 15 日的 1 a.m. 运行命令。在指定列表时,不要在逗号后面加空格。 |
0-59/15 | * | * | * | * | 每 15 分钟运行命令一次。0-59/15等同于*/15 |
30 | * | * | * | wed,fri | 星期三和星期五每小时的 30 分时执行命令一次。(在列表中可以使用日和月份的名称,但是在范围中不可以)。 |
0,30 | 0-5,17-23 | * | * | * | 在(0点-5点, 以及 17点-23点之间)整点时和 30 分时运行命令。 |
0 | 0 | 1 | 1 | * | 在每年 1 月 1 日0:00执行命令一次。 |
0 | 0 | * | * | 0 | 在每个星期日午夜运行命令。这相当于每周一次。 |
30 | 0 | 10,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文件,只要创建,仅列出的允许,其他都拒绝
本文出自 “Zhaoqi Learn To Linux” 博客,请务必保留此出处http://zhaoqifly.blog.51cto.com/3500118/1853558
以上是关于创建周期性任务 cron的主要内容,如果未能解决你的问题,请参考以下文章