Linux 技巧: 用 cron 和 at 调度作业
2008-11-30 17:36
253 查看
Ian Shields, 高级程序员, IBM 2007 年 8 月 27 日 系统管理员需要在系统负载低的午夜运行作业,或者需要每天或每月运行作业,同时又不愿意牺牲睡眠时间或假期。调度任务的其他原因包括自动执行日常任务或者确保每次都以相同的方式处理任务。本文帮助您使用 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. 一个简单的命令示例
使用 crontab命令和 -e(表示 “edit”)选项创建 crontab。这会打开 vi编辑器,除非在 EDITOR 或 VISUAL 环境变量中指定了另一种编辑器。 每个 crontab 条目包含六个字段: 分钟 小时 日 月 星期 由 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 示例
输出 您可能想知道对来自命令的输出会如何处理。为使用 cron 而设计的大多数命令会使用 syslog 在日志中记录输出(参见教程 “LPI 102 考试准备:管理任务” 中的讨论)。但是,定向到 stdout 的输出会通过电子邮件发送给用户。清单 3 给出我们的命令示例可能产生的输出。 清单 3. 通过电子邮件发送的 cron 输出
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/crontab
run-parts 命令执行,它运行 /etc/cron.hourly、/etc/cron.daily 等目录中的脚本;/etc/crontab 仅仅控制执行作业的时间。注意,这里的所有命令都作为根用户运行。还要注意,crontab 可以包含 shell 变量赋值,这些赋值会在运行命令之前执行。 anacron cron 适合那些连续运行的系统。对于那些常常不开机的系统,比如笔记本计算机,可以使用另一个实用程序 anacron(表示 “anachronistic cron”)调度每日、每周或每月执行的作业。anacron 不处理每小时执行的作业。 anacron 在 /var/spool/anacron 中保留时间戳文件,记录作业运行的时间。当 anacron 运行时,它检查自作业上一次运行以来是否已经经过了所需的天数,如果需要,就运行作业。anacron 的作业表存储在 /etc/anacrontab 中,文件格式与 /etc/crontab 略有不同。与 /etc/crontab 一样,/etc/anacrontab 可以包含环境设置。每个作业有四个字段: 周期 延迟 作业标识符 命令 周 期是天数,但是可以指定为 @monthly,这确保作业每个月只运行一次(无论这个月中有多少天)。延迟是在作业符合运行条件之后,到实际启动它之前等待的分钟数。可以使用这个设 置防止在系统启动时集中执行作业。作业标识符可以包含除了斜线(/)之外的所有非空白字符。 /etc/crontab 和 /etc/anacrontab 都通过直接编辑进行更新。不使用 crontab命令更新这些文件或 /etc/cron.d 目录中的文件。 有时候,需要只运行作业一次而不是定期运行。为此,应该使用 at命令。要运行的命令是从 -f选项指定的文件读取的,如果没有使用 -f,那么从 stdin 读取。 -m选项向用户发送邮件,即使命令没有 stdout。 -v选项显示运行作业的时间。这个时间也显示在输出中。 清单 5 给出一个运行 mycrontest.sh脚本的示例。清单 6 显示在运行作业之后通过邮件发送给用户的输出。注意,这里的输出比对应的 cron 作业输出要简单一些。 清单 5. 使用 at 命令
at的手册页、/usr/share/doc/at/timespec 文件或 /usr/share/doc/at-3.1.10/timespec 这样的文件(这个示例中的 3.1.10 是 at包的版本号)。 清单 7. at 命令使用的时间值
at命令还有一个 -q选项。随着队列的增长,作业的 nice值也会增长。 还有一个 batch命令,它与 at命令相似,但是作业只在系统负载足够低时运行。这些特性的细节参见手册页。 列出调度的作业 可以管理 cron 和 at 作业。使用 crontab命令和 -l选项列出 crontab,使用 atq命令显示用 at命令加入队列中的作业,见清单 8。 清单 8. 显示调度的作业
at调度执行的实际命令,那么可以使用 at命令并加上 -c选项和作业号。您会注意到,在发出 at命令时生效的大多数环境设置会随调度的作业一起保存。清单 9 给出清单 7 和清单 8 中作业 15 的部分输出。 清单 9. 使用 at -c 并加上作业号
一个 here-document 中,这个 here-document 将由 SHELL 变量指定的 shell 执行(如果没有设置 SHELL 变量,就使用 /bin/sh)。关于 here-document 的信息参见教程 “LPI 101 考试准备,主题 103:GNU 和 UNIX 命令”。 删除调度的作业 可以使用 cron命令和 -r选项删除所有调度的 cron 作业,见清单 10。 清单 10. 显示并删除 cron 作业
可以使用 atrm命令加作业号删除用 at命令调度的一个或多个作业。多个作业应该用空白分隔。清单 11 给出一个示例。 清单 11. 用 atq 和 atrm 显示并删除作业
如果文件 /etc/cron.allow 存在,那么非根用户必须在其中列出,才能使用 crontab和 cron 设施。如果 /etc/cron.allow 不存在,但是 /etc/cron.deny 存在,那么其中列出的非根用户不能使用 crontab或 cron 设施。如果这两个文件都不存在,那么只允许超级用户使用这个命令。空的 /etc/cron.deny 文件允许所有用户使用 cron 设施,这是默认情况。 /etc/at.allow 和 /etc/at.deny 文件对 at 设施起相似的作用。 如果想了解关于 Linux 管理任务的更多信息,请阅读教程 “LPI 102 考试准备:管理任务”,或者参见下面的 参考资料。不要忘记 rate 这个页面。 参考资料 学习 您可以参阅本文在 developerWorks 全球站点上的 英文原文。 回顾教程 “LPI 102 考试准备:管理任务”(developerWorks,2007 年 7 月),了解关于 Linux 上其他管理任务的信息,包括用户管理、备份、系统日志和 Network Time Protocol。它是 LPI 考试准备教程系列 的一部分,这个系列覆盖 Linux 基础知识,帮助您准备系统管理员认证。本教程还引用了这个系列中的两个教程 “LPI 101 考试准备:GNU 和 UNIX 命令” 和 “LPI 101 考试准备:设备、Linux 文件系统和 Filesystem Hierarchy Standard”。 Linux Documentation Project 有很多非常有用的文档,尤其是其中的 HOWTO 指导。 在 developerWorks Linux 专区 中可以找到为 Linux 开发人员准备的更多教程,包括 Linux 教程,以及最近几个月 读者最喜爱的 Linux 文章和教程。 随时关注 developerWorks 技术活动和网络广播。 获得产品和技术 索取 SEK for Linux,这套 DVD(两张)包含来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的最新 IBM 试用版 Linux 软件。 使用 IBM 试用软件 构建您的下一个 Linux 开发项目,这些软件可以从 developerWorks 直接下载。 讨论 参与论坛讨论。 通过新的 developerWorks spaces 中的开发人员 blog、论坛、podcast 和社区主题,加入 developerWorks 社区。 关于作者
|
相关文章推荐
- Linux 技巧: 用 cron 和 at 调度作业
- Linux 技巧: 用 cron 和 at 调度作业
- Linux 技巧: 用 cron 和 at 调度作业
- Linux 技巧: 用 cron 和 at 调度作业
- Linux 技巧: 用 cron 和 at 调度作业
- Linux 技巧:让进程在后台可靠运行的几种方法 用 cron 和 at 调度作业 使用 screen 管理你的远程会话
- Linux 技巧: 用 cron 和 at 调度作业
- Linux 技巧: 用 cron 和 at 调度作业
- Linux 技巧: 用 cron 和 at 调度作业
- Linux 技巧: 用 cron 和 at 调度作业
- Linux 技巧: 用 cron 和 at 调度作业
- 用cron+at 调度作业
- Linux的任务调度 at / cron (crontab | anacron)
- linux自动化作业安排工具cron anacron at batch (二)
- Linux 技巧: 用 cron 和 at 调度作业
- Linux系统下任务作业自动化执行工具----cron、 anacron、at、和 batch(1) 推荐
- linux自动化作业安排工具cron anacron at batch (2) 推荐
- Linux系统下任务作业自动化执行工具--cron、 anacron、at、和 batch
- Linux技巧:用cron和at调度作业
- linux命令:任务计划crontab anacrontab at cron