首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 cron 进行自动维护(1)

使用 cron 进行自动维护(1)

开始之前本节解释本教程讲授什么内容,以及如何从中获得最大的收益。
关于本教程本教程解释如何配置和维护 cron,cron 是几乎所有 UNIX® 计算机上都有的作业调度程序。另外,本教程演示 cron 的其他一些应用。                       
目标学习如何创建、调度和管理 cron 作业,如何通过定义时间表控制作业频率,从每分钟一次到每年一次。另外,学习如何限制访问 cron 以避免滥用,以及如何结合使用其他实用程序和 cron 以自动执行常见的维护任务。                       
前提条件本教程针对 UNIX(和类 UNIX)系统的用户和系统管理员。要想学习本教程,您应该熟悉命令行 shell 和 shell 脚本。具备在 UNIX 上安装和配置软件的经验也是有帮助的。                       
系统需求要想运行本教程中的示例,需要一台 UNIX 计算机。如果希望配置系统范围的 cron,还需要根访问权。本教程中的示例基于在现代 UNIX 系统上广泛使用的 Vixie cron,并使用 Ubuntu Desktop Linux® version 8.04.1。其他版本的 cron 与 Vixie 相似;具体信息请参见自己的 UNIX 系统文档。                       
不中断运行与您和我不同,计算机可以永不疲倦地工作,以相同的精力执行每个任务。另外,计算机可以每周 7 天每天 24 小时连续工作,包括风雪天和公共假日。               
cron 守护进程但是,要想实现连续不停的计算,任务必须能够在任何时候运行。您可以晚上定时醒来,在几十台机器上登录并输入各种命令;也可以放心地休息,把工作交给 cron。cron 是一个守护进程(也就是不间断运行的进程),它根据调度计划执行命令。无论白天还是黑夜,无论工作多么繁重,cron 都会毫无怨言地注意时间并按时运行作业。                       
需要监视 FTP 收存箱(drop-box)接收到的数据吗?使用 cron 每几分钟运行一个 shell 脚本。需要删除每天积累的草稿文件吗?在午夜执行垃圾收集。希望定期循环使用日志文件吗?设置一个每周调度计划。                       
在这里,学习如何配置和维护 cron 并了解它的众多应用。具体地说,本教程讨论 Vixie cron,Vixie 这个名称源自它的开发者 Paul Vixie。在 FreeBSD、Apple Mac OS X、大多数风格的 Linux 和其他 UNIX 系统上都可以找到 Vixie cron。要想查明您的系统是否运行 Vixie cron,可以输入 man cron 或 man crontab,查看末尾是否提到开发者是 Paul Vixie。                       
要想学习本教程和使用 cron,您应该熟悉至少一种文本编辑器,比如 vi 或 Emacs,还应该有使用 UNIX 命令行、shell 脚本和 shell 环境变量的经验。另外,如果希望修改系统范围的 cron 配置文件,还必须有根(超级用户)访问权。                       
了解 cron 概念cron 守护进程是一个由实用程序和配置文件组成的小型子系统,在几乎所有类 UNIX 系统上都可以找到某种风格的 cron。cron 的组件包括守护进程本身;一组系统范围的配置文件;一组针对特定用户的配置文件;一个用来添加、修改和删除用户配置文件的实用程序;以及一个简单的访问控制设施。一般来说,cron 配置文件或 cron 作业的列表被称为 crontabcron 时间表。                       
  • 守护进程 cron 连续运行,每分钟检查一次配置文件中的修改。cron 读取系统范围的和针对用户的 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,按照逻辑对属于某一子系统的命令进行分组。例如,PHP 5 编程语言的包在 /etc/cron.d 中安装一个名为 php5 的 crontab,它会定期清除不使用的会话。/etc/cron.d 中的文件采用与 /etc/crontab 相同的语法,每个作业按照自己的时间表并作为特定的用户运行。
    • 还可以把 shell 脚本直接放在 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 或 /etc/cron.monthly 目录中,这样就可以每小时、每天、每周或每月运行此脚本一次。放在这里的脚本作为超级用户运行。
  • 针对用户的 crontab 集合通常放在 /var/spool/cron/crontabs 中。(具体位置请参见您的 UNIX 系统文档。一些系统把用户 crontab 放在 /usr/lib 中)。但是,不能直接编辑此目录中的文件,而是使用 crontab 实用程序创建 crontab 并提交文件。稍后讨论如何管理个人的 crontab。
  • 最后,可以分别使用访问控制文件 /etc/cron.allow 和 /etc/cron.deny 允许或拒绝用户访问 cron。例如,如果某个用户的作业可能会破坏系统的正常操作,就可以拒绝他访问 cron。
如您所见,不需要为保持系统不间断运行而牺牲您的休息时间。只需确定作业、定义它的调度计划并在适当的 crontab 中设置此作业,然后就可以放心地休息了。现在就来看看 cron  文件的特殊语法。                       
处理 crontabcrontab 仅仅是一个文本文件,可以用任何 UNIX 编辑器编辑它。它可以包含四种代码行:空行、注释、环境变量设置和命令。                       
空行和注释文件中的空行和多余的空格被忽略。空行和空格有助于提高 crontab 的可读性,使 crontab 组织有序。                               
还可以使用注释对每个作业的时间表和用途加以说明。要想创建注释,只需在一行的开头加上一个井号(#)。                               
环境变量和命令cron 最终使用一个 shell 执行每个命令。可以通过环境变量修改或定制 shell 的行为。                               
在 crontab 中很容易设置 shell 环境变量。只需输入 VARIABLE=value,把 VARIABLE 替换为变量名,把 value 替换为一个值。例如,crontab 行:                               
1
PATH=/usr/bin:/bin:/usr/local/bin




指定一个有序的目录列表作为 shell 搜索路径。
cron 预定义了五个环境变量:                               
  • PATH 的默认值是 /usr/bin:/bin。
  • SHELL 预设置为 /bin/sh。
  • LOGNAME 初始化为 crontab 所有者的用户名。
  • HOME 设置为 crontab 所有者的主目录,比如 /home/joe。
  • MAILTO 设置为 crontab 所有者的名称。
要想修改这些默认值或设置任何变量,只需在 crontab 中设置适当的环境变量。                               
当然,crontab 可以包含任意数量的命令行。每个命令行指定一个频率、一个用户名(只对于系统 crontab)和一个要运行的任务。例如,命令:                               
1
5 0 * * *   root   find /tmp -type f -empty -delete




在每天 12:05 a.m(5 0 * * *)删除 /tmp 中的所有空文件和目录(find /tmp -type f -empty -delete)。此作业作为根用户(root)运行。                               
系统 crontab 命令必须指定一个用户名,作为运行此任务所用的用户。(因此,在 /etc/crontab 中可能看到上面的命令)。针对用户的 crontab 不能指定用户名;一个用户的 cron 命令总是作为这个用户运行。是否有用户名是系统 crontab 和用户 crontab 之间的惟一差异。                               
下面讨论定制时间表的众多方式。
返回列表