




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux 技巧: 用 cron 和 at 调度作业 系统管理员需要在系统负载低的午夜运行作业,或者需要每天或每月运行作业,同时又不愿意牺牲睡眠时间或假期。调度任务的其他原因包括自动执行日常任务或者确保每次都以相同的方式处理任务。本文帮助您使用 cron 和 at 功能调度作业定期运行或在指定的时间运行一次。Linux 和 UNIX 系统允许调度任务在以后执行一次,或者重复运行。本文是从 developerWorks 教程 “LPI 102 考试准备:管理任务” 摘录的,讲解如何调度作业定期运行,或在指定的时间运行一次。在 Linux 系统上,许多管理任务必须频繁地定期执行。这些任务包括轮转日志文件以避免装满文件系统、备份数据和连接时间服务器来执行系统时间同步。上面提到的教程更详细地介绍了这些管理任务。在本文中,学习 Linux 中提供的调度机制,包括 cron 和 anacron 设施以及 crontab 和 at 命令。即使系统常常关机,anacron 也可以帮助调度作业。以一定的时间间隔运行作业以一定的时间间隔运行作业需要使用 cron 设施进行管理,它由 crond 守护进程和一组表(描述执行哪些操作和采用什么样的频率)组成。这个守护进程每分钟唤醒一次,并通过检查 crontab 判断需要做什么。用户使用 crontab 命令管理 crontab。crond 守护进程常常是在系统启动时由 init 进程启动的。为了简单,假设希望定期运行清单 1 所示的命令。这个命令实际上只报告日期和时间,其他什么事都不做,但是它可以说明如何使用 crontab 设置 cron 作业,而且还可以通过输出看到作业运行的时间。设置 crontab 条目需要一个包含转义的 shell 元字符的字符串,所以适合于简单的命令和参数。在这个示例中,将从脚本 /home/ian/mycrontab.sh 运行 echo 命令,这个脚本不需要参数。 这可以减少处理转义字符的工作。清单 1. 一个简单的命令示例ianlyrebird $ cat mycrontest.sh#!/bin/bash echo It is now $(date +%T) on $(date +%A)ianlyrebird $ ./mycrontest.shIt is now 18:37:42 on Friday创建 crontab使用 crontab 命令和 -e(表示 “edit”)选项创建 crontab。这会打开 vi 编辑器,除非在 EDITOR 或 VISUAL 环境变量中指定了另一种编辑器。每个 crontab 条目包含六个字段:1. 分钟 2. 小时 3. 日 4. 月 5. 星期 6. 由 sh 执行的字符串 分钟和小时的范围分别是 0-59 和 0-12,日和月的范围分别是 1-31 和 1-12。星期的范围是 0-6,0 表示星期日。星期也可以指定为 sun、mon、tue 等等。第 6 个字段包含前 5 个字段之后的所有内容,它是要传递给 sh 的字符串。百分号(%)将转换为空行,所以如果要使用 % 或其他任何特殊字符,就要在前面加上反斜线()。第一个 % 之前的一行传递给 shell,这个 % 之后的所有行都作为标准输入传递。各个与时间相关的字段可以指定一个单独的值、值的范围(比如 0-10 或 sun-wed)或者以逗号分隔的单独值和范围列表。清单 2 给出一个 crontab 条目示例。清单 2. 一个简单的 crontab 示例0,20,40 22-23 * 7 fri-sat /home/ian/mycrontest.sh在这个示例中,我们的命令在 7 月的每个星期五和星期六晚上 10 点到午夜之间的第 0、20、40 分钟(每 20 分钟)执行。关于指定时间的其他方式的细节,参见 crontab(5) 的手册页。输出您可能想知道对来自命令的输出会如何处理。为使用 cron 而设计的大多数命令会使用 syslog 在日志中记录输出(参见教程 “LPI 102 考试准备:管理任务” 中的讨论)。但是,定向到 stdout 的输出会通过电子邮件发送给用户。清单 3 给出我们的命令示例可能产生的输出。清单 3. 通过电子邮件发送的 cron 输出From Fri Jul 6 23:00:02 2007Date: Fri, 6 Jul 2007 23:00:01 -0400From: (Cron Daemon)To: Subject: Cron /home/ian/mycrontest.shContent-Type: text/plain; charset=UTF-8Auto-Submitted: auto-generatedX-Cron-Env: X-Cron-Env: X-Cron-Env: X-Cron-Env: X-Cron-Env: It is now 23:00:01 on Fridaycrontab 存储在哪里?suid 程序suid 程序以程序文件的所有者的权限运行,而不是采用运行程序的用户的权限。关于 suid 的更多信息,参见教程 “LPI 101 考试准备:设备、Linux 文件系统和 Filesystem Hierarchy Standard”;关于 passwd 命令的更多信息,参见教程 “LPI 102 考试准备:管理任务”。用 crontab 命令创建的 crontab 存储在 /etc/spool/cron 下面的一个子目录中,这个子目录与创建 crontab 的用户同名,所以上面的 crontab 存储在 /etc/spool/cron/ian 中。因此,与 passwd 命令一样,crontab 命令是一个用根权限运行的 suid 程序。/etc/crontab除了 /var/spool/cron 中的用户 crontab 文件之外,cron 还会检查 /etc/crontab 文件和 /etc/cron.d 目录中的文件。在这些系统 crontab 中,在第五个时间字段(星期)和命令之间增加了一个字段。这个字段指定哪个用户应该运行这个命令,一般情况下是根用户。清单 4 给出一个 /etc/crontab 文件示例。清单 4. /etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# run-parts01 * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthly在这个示例中,真正的工作由 run-parts 命令执行,它运行 /etc/cron.hourly、/etc/cron.daily 等目录中的脚本;/etc/crontab 仅仅控制执行作业的时间。注意,这里的所有命令都作为根用户运行。还要注意,crontab 可以包含 shell 变量赋值,这些赋值会在运行命令之前执行。anacroncron 适合那些连续运行的系统。对于那些常常不开机的系统,比如笔记本计算机,可以使用另一个实用程序 anacron(表示 “anachronistic cron”)调度每日、每周或每月执行的作业。anacron 不处理每小时执行的作业。anacron 在 /var/spool/anacron 中保留时间戳文件,记录作业运行的时间。当 anacron 运行时,它检查自作业上一次运行以来是否已经经过了所需的天数,如果需要,就运行作业。anacron 的作业表存储在 /etc/anacrontab 中,文件格式与 /etc/crontab 略有不同。与 /etc/crontab 一样,/etc/anacrontab 可以包含环境设置。每个作业有四个字段:1. 周期 2. 延迟 3. 作业标识符 4. 命令 周 期是天数,但是可以指定为 monthly,这确保作业每个月只运行一次(无论这个月中有多少天)。延迟是在作业符合运行条件之后,到实际启动它之前等待的分钟数。可以使用这个设 置防止在系统启动时集中执行作业。作业标识符可以包含除了斜线(/)之外的所有非空白字符。/etc/crontab 和 /etc/anacrontab 都通过直接编辑进行更新。不使用 crontab 命令更新这些文件或 /etc/cron.d 目录中的文件。回页首在指定的时间运行作业有时候,需要只运行作业一次而不是定期运行。为此,应该使用 at 命令。要运行的命令是从 -f 选项指定的文件读取的,如果没有使用 -f,那么从 stdin 读取。-m 选项向用户发送邮件,即使命令没有 stdout。-v 选项显示运行作业的时间。这个时间也显示在输出中。清单 5 给出一个运行 mycrontest.sh 脚本的示例。清单 6 显示在运行作业之后通过邮件发送给用户的输出。注意,这里的输出比对应的 cron 作业输出要简单一些。清单 5. 使用 at 命令ianlyrebird $ at -f mycrontest.sh -v 10:25Sat Jul 7 10:25:00 2007job 5 at Sat Jul 7 10:25:00 2007清单 6. 来自 at 的作业输出From Sat Jul 7 10:25:00 2007Date: Sat, 7 Jul 2007 10:25:00 -0400From: Ian Shields Subject: Output from your job 5To: It is now 10:25:00 on Saturday时间的设置可以非常复杂。清单 7 给出几个示例。参见 at 的手册页、/usr/share/doc/at/timespec 文件或 /usr/share/doc/at-3.1.10/timespec 这样的文件(这个示例中的 3.1.10 是 at 包的版本号)。清单 7. at 命令使用的时间值ianlyrebird $ at -f mycrontest.sh 10pm tomorrowjob 14 at Sun Jul 8 22:00:00 2007ianlyrebird $ at -f mycrontest.sh 2:00 tuesdayjob 15 at Tue Jul 10 02:00:00 2007ianlyrebird $ at -f mycrontest.sh 2:00 july 11job 16 at Wed Jul 11 02:00:00 2007ianlyrebird $ at -f mycrontest.sh 2:00 next weekjob 17 at Sat Jul 14 02:00:00 2007nice 值nice 值表示一个作业对于其他用户的优先程度。关于 nice 和 renice 命令的更多信息,参见教程 “LPI 101 考试准备:GNU 和 UNIX 命令”。at 命令还有一个 -q 选项。随着队列的增长,作业的 nice 值也会增长。 还有一个 batch 命令,它与 at 命令相似,但是作业只在系统负载足够低时运行。这些特性的细节参见手册页。回页首管理调度的作业列出调度的作业可以管理 cron 和 at 作业。使用 crontab 命令和 -l 选项列出 crontab,使用 atq 命令显示用 at 命令加入队列中的作业,见清单 8。清单 8. 显示调度的作业ianlyrebird $ crontab -l0,20,40 22-23 * 7 fri-sat /home/ian/mycrontest.shianlyrebird $ atq16 Wed Jul 11 02:00:00 2007 a ian17 Sat Jul 14 02:00:00 2007 a ian14 Sun Jul 8 22:00:00 2007 a ian15 Tue Jul 10 02:00:00 2007 a ian如果希望查看 at 调度执行的实际命令,那么可以使用 at 命令并加上 -c 选项和作业号。您会注意到,在发出 at 命令时生效的大多数环境设置会随调度的作业一起保存。清单 9 给出清单 7 和清单 8 中作业 15 的部分输出。清单 9. 使用 at -c 并加上作业号#!/bin/sh# atrun uid=500 gid=500# mail ian 0umask 2HOSTNAME=; export HOSTNAMESHELL=/bin/bash; export SHELLHISTSIZE=1000; export HISTSIZESSH_CLIENT=51 3210 22; export SSH_CLIENTSSH_TTY=/dev/pts/5; export SSH_TTYUSER=ian; export USER .HOME=/home/ian; export HOMELOGNAME=ian; export LOGNAME .cd /home/ian | echo Execution directory inaccessible &2 exit 1$SHELL:-/bin/sh /dev/null|LC_ALL=C tr -d -c :alnum:)#!/bin/bash echo It is now $(date +%T) on $(date +%A)注意,我们脚本文件的内容已经复制在 一个 here-document 中,这个 here-document 将由 SHELL 变量指定的 shell 执行(如果没有设置 SHELL 变量,就使用 /bin/sh)。关于 here-document 的信息参见教程 “LPI 101 考试准备,主题 103:GNU 和 UNIX 命令”。删除调度的作业可以使用 cron 命令和 -r 选项删除所有调度的 cron 作业,见清单 10。清单 10. 显示并删除 cron 作业ianlyrebird $ crontab -l0,20,40 22-23 * 7 fri-sat /home/ian/mycrontest.shianlyrebird $ crontab -rianlyrebird $ crontab -lno crontab for ian要删除系统 cron 或 anacron 作业,应该编辑 /etc/crontab、/etc/anacrontab 或者编辑或删除 /etc/cron.d 目录中的文件。可以使用 atrm 命令加作业号删除用 at 命令调度的一个或多个作业。多个作业应该用空白分隔。清单 11 给出一个示例。清单 11. 用 atq 和 atrm 显示并删除作业ianlyrebird $ atq16 Wed Jul 11 02:00:00 2007 a ian17 Sat Jul 14 02:00:00 2007 a ian14 Sun Jul 8 22:00:00 2007 a ian15 Tue Jul 10 02:00:00 2007 a ianianlyrebird $ atrm 16 14 15ianlyrebird $ atq17 Sat Jul 14 02:00:00 2007 a ian回页首配置用户对作业调度的访问如果文件 /etc/cron.allow 存在,那么非根用户必须在其中列出,才能使用 crontab 和 cron 设施。如果 /etc/cron.allow 不存在,但是 /etc/cron.deny 存在,那么其中列出的非根用户不能使用 crontab 或 cron 设施。如果这两个文件都不存在,那么只允许超级用户使用这个命令。空的 /etc/cron.deny 文件允许所有用户使用 cron 设施,这是默认情况。/etc/at.allow 和 /etc/at.deny 文件对 at 设施起相似的作用。一、cron1、工具概述用于安排周期性的任务作业;cron根据时间、日期、星期、月份的组合来调度对重复作业任务的周期性执行;查看系统中程序是否安装:cron程序依赖于vixie-cron RPM 软件包; rpm q vixie-cronCron对应的系统守护进程:crond查看系统中是否正在运行cron服务:service crond status 2、程序配置Cron的主配置文件/etc/crontab,包括内容如下:SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/前四行是shell环境变量,设置cron运行的系统环境;# run-parts01 * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthly/etc/crontab 文件中的每一行都代表一项任务,它的格式是:minute hour day month dayofweek command分钟 小时 天 月 星期 要执行的命令 minute 分钟,从 0 到 59 之间的任何整数 hour 小时,从 0 到 23 之间的任何整数 day 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期) month 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等) dayofweek 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日 command 要执行的命令(命令可以是 ls /proc /tmp/proc 之类的命令,也可以是执行你自行编写的脚本的命令。)在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。整数间的短线(-)指定一个整数范围。如1-4 意味着整数 1、2、3、4用逗号(,)隔开的一系列值指定一个列表。如3, 4, 6, 8 标明这四个指定的整数正斜线(/)可以用来指定间隔频率。在范围后加上 / 意味着在范围内可以跳过 integer。如0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务;Cron程序使用 run-parts 脚本来执行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目录中的脚本,这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中的文件应该是 shell 脚本。 Run-parts脚本位置:/usr/bin/run-partsRun-parts脚本作用: 将会执行目标目录中所有的脚本, 这些脚本会以ASCII码的循序进行排列, 当然,这些脚本都需要具有可执行权限;3、配置命令crontab命令的功能是在一定的时间间隔调度一些命令的执行;crontab命令有三种形式的命令行结构: crontab -u user file crontab -u user -e|-l|-r crontab -l -u -e|-l|-r -r-作用是从/usr/spool/cron/crontabs目录下删除用户定义的文件crontab; -l-选项的作用是显示用户crontab文件的内容;crontab -u user -e命令编辑用户user的cron作业,用户通过编辑文件来增加或修改任何作业请求; crontab -u user -r即可删除当前用户的所有的cron作业;作业与它们预定的时间储存在文件/var/spool/cron/crontabs/username, username使用户名,在相应的文件中存放着该用户所要运行的命令;命令执行的结果,无论是标准输出还是错误输出,都将以邮件形式发给用户;cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、以及 /var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了;4、控制对cron的使用/etc/cron.allow 和 /etc/cron.deny 文件被用来限制对 cron 的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。无论使用控制文件中的规定如何,根用户都总是可以使用 cron。如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略;如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron;二、 anacronanacron 是和 cron 相似的任务调度器,只不过它并不要求系统持续运行,它可以用来运行通常由 cron 运行的每日、每周、和每月的作业;要使用 anacron 服务,你必须安装了 anacron RPM 软件包, anacron 服务必须在运行;要判定该软件包是否被安装,使用 rpm -q anacron 命令要判定该服务是否在运行,使用 /sbin/service anacron status 命令1、配置 anacronAnacron与cron一样用来调度重复的任务,周期性安排作业;任务被列在配置文件 /etc/anacrontab 中。文件中的每一行都代表一项任务,格式是:# /etc/anacrontab: configuration file for anacron# See anacron(8) and anacrontab(5) for details.SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin1 65 cron.daily run-parts /etc/cron.daily7 70 cron.weekly run-parts /etc/cron.weekly30 75 cron.monthly run-parts /etc/cron.monthly格式:period delay job-identifier command period 命令执行的频率(天数) delay 延迟时间(分钟) job-identifier 任务的描述,用在 anacron 的消息中,并作为作业时间戳文件的名称,只能包括非空白的字符(除斜线外)。 command 要执行的命令对于每项任务,anacron 先判定该任务是否已在配置文件的 period 字段中指定的期间内被执行了。如果它在给定期间内还没有被执行,anacron 会等待 delay 字段中指定的分钟数,然后执行 command 字段中指定的命令; 任务完成后,anacron 在 /var/spool/anacron 目录内的时间戳文件中记录日期;Anacron与cron 配置文件相似,SHELL 和 PATH 之类的环境变量可以在 /etc/anacrontab 文件的前部定义;三、at 和 batch 一次性作业任务at 命令被用来在指定时间内调度一次性的任务;batch 命令被用来在系统平均载量降到 0.8 以下时执行一次性的任务;要使用 at 或 batch 命令,你必须安装了 at RPM 软件包,并且 atd 服务必须在运行要判定该软件包是否被安装了,使用 rpm -q at 命令要判定该服务是否在运行,使用 /sbin/service atd status 命令程序对应的系统守护进程为:atd1、配置 at 作业要在某一指定时间内调度一项一次性作业,键入 at time 命令。这里的 time 是执行命令的时间time 参数可以是下面格式中任何一种: HH:MM 格式 譬如,04:00 代表 4:00AM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 哈佛考试题及答案
- 中级汉语口语(二)知到智慧树答案
- 中级微观经济学(南昌大学)知到智慧树答案
- 土建施工员模拟练习题(附答案)
- 中外石油文化知到智慧树答案
- 机修钳工(设备钳工)试题+答案
- 工厂及企业各工种新员工入职三级安全教育考试题试卷及答案
- 高血压试题及答案3
- 2025电子商务电子合同电子合同电子证据采集与固定合同
- 2025年旅游景区停车场车位使用权转让协议
- 酒店会议服务标准流程作业指导书
- 网络攻防原理与技术 第3版 教案 -第12讲 网络防火墙
- 第一响应人应急培训
- 初中数学七年级上册思维导图
- 中学八年级信息技术Excel-电子表格教案
- 《认识感官》课件
- 工程伦理课程课件
- 秋季传染病预防知识讲座课件
- 055.重症超声在重症相关操作中应用专家共识
- 人教版九年级上册化学第二单元 空气和氧气(单元复习课件)
- 2024小学语文教学及说课课件:二年级上册《田家四季歌》
评论
0/150
提交评论