14.4.Cron 和 Periodic
安排任务在特定的日期或时间运行是在 FreeBSD 上非常常见的任务。负责执行此任务的工具是 cron(8)。
除了用户可以通过 cron(8)进行调度的任务之外,FreeBSD 还执行由 periodic(8)管理的常规后台任务。
14.4.1. Cron
cron(8) 实用程序在后台运行,定期检查 /etc/crontab 以查找要执行的任务,并搜索 /var/cron/tabs 以查找自定义 crontab 文件。
这些文件用于安排任务,cron 在指定的时间运行这些任务。
crontab 中的每个条目定义要运行的任务,并称为 cron 作业。
使用两种不同类型的配置文件:系统 crontab 不应更改,用户 crontab 可以根据需要创建和编辑。这些文件的格式在 crontab(5)中有文档记录。系统 crontab 的格式,/etc/crontab 包含一个 who 列,在用户 crontab 中不存在。在系统 crontab 中,cron 以该列中指定的用户身份运行命令。在用户 crontab 中,所有命令都作为创建 crontab 的用户运行。
用户的 crontab 允许个别用户安排自己的任务。root 用户也可以有一个用户 crontab,用于安排系统 crontab 中不存在的任务。
这里是系统 crontab 中的一个示例条目,/etc/crontab:
以 # 字符开头的行是注释。注释可以放在文件中作为对所执行操作的提醒。注释不能与命令在同一行上,否则它们将被解释为命令的一部分;它们必须在新的一行上。空行将被忽略。 | |
---|---|
等号( = )字符用于定义任何环境设置。在这个例子中,它被用来定义 SHELL 和 PATH。如果省略 SHELL,cron 将使用默认的 Bourne shell。如果省略 PATH,必须提供命令或脚本的完整路径以运行。 | |
这一行定义了系统 crontab 中使用的七个字段: minute,hour,mday,month,wday,who,和 command。minute 字段是指定命令运行的分钟时间,hour 是指定命令运行的小时时间,mday 是月中的某天,month 是月份,wday 是星期中的某天。这些字段必须是数字值,表示二十四小时制,或者是 *,表示该字段的所有值。who 字段只存在于系统 crontab 中,指定应以哪个用户身份运行该命令。最后一个字段是要执行的命令。 | |
这个条目定义了这个 cron 作业的值。*/11,后面跟着几个 * 字符,指定了 /usr/libexec/save-entropy 被 operator 每小时每天每周的每一天的每十一分钟调用。命令可以包括任意数量的开关。然而,跨多行延伸的命令需要使用反斜杠""续行字符进行分隔。 |
创建用户定时任务
要创建用户定时任务,请在编辑模式中调用 crontab :
这将使用默认文本编辑器打开用户的定时任务。当用户第一次运行此命令时,它将打开一个空文件。用户创建了定时任务以后,这个命令将打开该文件进行编辑。
将这些行添加到 crontab 文件顶部是有用的,以设置环境变量并记住 crontab 字段的含义:
然后,为要运行的每个命令或脚本添加一行,指定运行命令的时间。此示例每天下午两点运行指定的自定义 Bourne shell脚本。由于 PATH 中未指定脚本的路径,因此给出了脚本的完整路径:
crontab(5)讨论了 cron 设置的环境。检查脚本在 cron 环境中是否正常运行特别重要,特别是如果它们包含使用通配符删除文件的任何命令。
完成编辑 crontab 后,保存文件。它将自动安装,并且 cron 将读取 crontab 并在指定时间运行其 cron 作业。要列出 crontab 中的 cron 作业,请使用此命令:
输出应类似于以下内容:
要删除用户 crontab 中的所有 cron 作业:
输出应该类似于以下内容:
14.4.3. 周期性
FreeBSD 提供了一组系统管理脚本,用于检查各种子系统的状态,执行与安全相关的检查,轮转日志文件等。这些脚本定期运行:每天、每周或每月。这些任务的管理由 periodic(8) 执行,并且其配置位于 periodic.conf(5) 中。周期性任务由系统 crontab 中的条目启动,如上所示。
周期性执行的脚本存放在 /etc/periodic/ 用于基本实用程序,在 /usr/local/etc/periodic/ 用于第三方软件。
它们被组织在 4 个子目录中,分别是每天,每周,每月和安全性。
14.4.4. 启用或禁用定期任务
FreeBSD 默认启用了一些脚本以定期运行。
要启用或禁用任务,第一步是编辑 /etc/periodic.conf 并执行以下命令:
然后要启用,例如,daily_status_zfs_enable 将以下内容放入文件中:
禁用默认情况下处于活动状态的任务,只需将 YES 更改为 NO。
14.4.5. 配置周期性任务的输出
在 /etc/periodic.conf 中,变量 daily_output,weekly_output 和 monthly_output 指定了脚本执行结果的发送位置。
默认情况下,周期性脚本的输出会通过电子邮件发送至 root 用户,因此最好阅读 root 用户的邮件或将 root 用户设置为监控的邮箱。
要将结果发送到另一个电子邮件地址或其他电子邮件地址,请在/etc/periodic.conf 中添加以空格分隔的电子邮件地址。
要将周期性输出记录到日志中而不是通过电子邮件接收,请在/etc/periodic.conf 中添加以下行。newsyslog(8)将在适当的时间轮转这些文件。
最后更新于