12.3. 配置 cron(8)
FreeBSD 中最有用的工具之一就是 cron
。这个工具在后台运行,并定期检查 /etc/crontab
中要执行的任务,并搜索 /var/cron/tabs
中的自定义 crontab
文件。这些文件被用来安排 cron
在指定时间运行的任务。crontab
中的每个条目都定义了一个要运行的任务,被称为 cron job
。
FreeBSD 使用了两种不同类型的配置文件:系统 crontab
和用户 crontab
,其中前者不应该被修改,而后者可以根据需要创建和编辑, 这些文件使用的格式在 crontab(5) 的手册中有记录。需要注意的是,系统 crontab
的格式,即/etc/crontab
包括的who
列,在用户 crontabs
中不存在。在系统 crontab
中,cron
以该列中指定的用户身份运行命令。在用户 crontab
中,所有命令都以创建 crontab
的用户的身份运行。
用户 crontab
允许单个用户安排他们自己的任务,root
用户也可以有一个用户 crontab
,用来安排系统 crontab
中不存在的任务。
如下是一个系统 crontab
,即 /etc/crontab
的示例:
# /etc/crontab - root's crontab for FreeBSD
#
# $FreeBSD$
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
#
#minute hour mday month wday who command
#
*/5 * * * * root /usr/libexec/atrun
对上述配置文件的解释如下:
- 以
#
开头的部分是注释,可以起到提醒的作用。注释不能和命令放在同一行,否则会被识别为是命令的一部分,因此注释必须另起一行。空行在执行过程中会被忽略。 =
符号是被用来定义任何环境设置的。在这个实例中,它被用来定义SHELL
和PATH
。如果SHELL
变量被忽略的话,cron
将会使用默认的 Bourne Shell;如果PATH
被忽略的话,当你运行某个程序或脚本时,将必须给定其完整路径。- 这一行定义了系统
crontab
所使用的七个字段(或参数):minute
,hour
,mday
,month
,wday
,who
以及command
。其中,minute
字段运行指定命令的时间(以分钟为单位),hour
是代表在一日中的第几个小时,mday
是指在一月中的某一日,month
是指月份,wday
则是指在一周中的哪一天。这些字段的值必须是数字类型的,且使用 24 小时计时法。若使用*
的话,则是指那个字段所包含的所有值,即对该字段下的条件不做限定。who
字段仅在系统crontab
中使用,是用来指定运行该命令的用户的。最后一个字段的对应值是你想要运行的程序。 - 这一行指定了这个
cron
任务的具体细节,即各个参数的对应值。比如,*/5
,以及它后面的那四个*
,代表了这个由root
用户执行的/usr/libexec/atrun
命令,需要在每一月、每一周的每一天内,每隔五分钟执行一次。命令可以包含任何数目的开关。扩展到多行的命令需要用反斜杠(\\
)字符断开。
13.3.1. 创建一个用户级的 Crontab
要创建一个用户 crontab,在编辑模式下调用 crontab
:
% crontab -e
这将使用默认的文本编辑器打开用户的 crontab
。用户第一次运行这个命令时,它将打开一个空文件,若用户曾经创建过一个 crontab
,该命令将打开该文件进行编辑。
将这些行添加到 crontab
文件的顶部是很有用的,以便设置环境变量和记住 crontab
中各字段的含义:
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
# Order of crontab fields
# minute hour mday month wday command
然后为每个要运行的命令或脚本添加一行,并在此指定运行该命令的时间。这个例子是每天下午两点运行指定的自定义 Bourne shell 脚本。由于脚本的路径没有在 PATH
中指定,所以我们给出了脚本的完整路径:
0 14 * * * /usr/home/dru/bin/mycustomscript.sh
提示
在使用自定义脚本之前,请确保它是可执行的,并且用 cron 设置的有限环境变量集来测试它。要复制用于运行上述 cron 条目的环境,请使用:
env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/dru LOGNAME=dru /usr/home/dru/bin/mycustomscript.sh
有关 cron 环境的设置可以在 crontab(5) 的手册中找到。如果脚本中包含任何使用通配符删除文件的命令,检查脚本是否在 cron 环境中正确运行就显得尤为重要。
当完成编辑 crontab
后,保存该文件,之后它将被自动读取,cron 会读取 crontab
并在其指定的时间运行其 cron 作业。要列出 crontab
中的 cron 工作,使用这个命令:
% crontab -l
0 14 * * * /usr/home/dru/bin/mycustomscript.sh
要删除这个用户 crontab
中的所有 cron 作业,使用这个命令:
% crontab -r
remove crontab for dru? y