11.3. 设定cron(8)

Contributed by Tom Rhodes.

在FreeBSD其中最有用的其中一项工具便是cron,这个工具会在背景执行并且定期检查/etc/crontab是否有要执行的工作然后搜寻/var/cron/tabs是否有自定义的crontab档案,这些档案用来安排要让cron在指定的时间执行的工作,crontab中的每一个项目定义了一个要执行的工作,又称作cron job

这里使用了两种类型的配置文件:其一是系统crontab,系统crontab不应该被修改,其二为使用者crontab,使用者crontab可以依需要建立与编辑。这两种档案的格式在crontab(5)有说明。系统crontab/etc/crontab的格式含有在使用者crontab所没有的who字段,在系统crontab,cron会依据该字段所指定的使用者来执行指令,而在使用者crontab,会以建立crontab的使用者来执行指令。

使用者crontab让个别使用者可以安排自己的工作,root使用者也可有自己的使用者crontab来安排不在系统crontab中的工作。

以下为系统crontab /etc/crontab的示例项目:

# /etc/crontab - root's crontab for FreeBSD
#
# $FreeBSD$
# 1
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin 2
#
#minute	hour	mday	month	wday	who	command 3
#
*/5	*	*	*	*	root	/usr/libexec/atrun 4

1

#字元为首的行代表注释。可在档案中放置注释提醒要执行什么动作及为何要执行。注释不可与指令同行,否则会被当做指令的一部份,注释必须在新的一行,空白行则会被忽略掉。

2

等号(=)字元用来定义任何环境设定。在这个例子当中,使用了等号来定义SHELLPATH。若SHELL被省略,cron则会使用预设的Bourne shell。若PATH被省略,则必须指定指令或Script的完整路径才能执行。

3

此行定义了在系统crontab会使用到的七个字段:minutehourmdaymonthwdaywho以及commandminute字段是指定指令要执行的时间中的分,hour指定指令要执行的时,mday是月里面的日,month是月,以及wday是周里面的日。这些字段必须数值代表24小时制的时间或*来代表所有可能的值。who这个字段只有系统crontab才有,用来指定要用那一个使用者来执行指令。最后一个字段则是要执行的指令。

4

这个项目定义了该工作所使用的数值,*/5后接着数个*字元指的是每个月的每一周的每一日的每个小时的每5分钟会使用root执行/usr/libexec/atrun

指令可含任何数量的参数,但若指令要使用多行则需以反斜线\联机字元换行。

11.3.1. 建立使用者的Crontab

要建立一个使用者crontab可使用编辑模式执行crontab

% crontab -e

这样会使用预设的文字编辑器来开启使用者的crontab,使用者第一次执行这个指令会开启一个空的档案,使用者建立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

然后每一个要执行的指令或Script加入一行,指定要执行指令的时间。这个例子会每天在下午2点执行指定的自定义Bourne shell script,由于没有在PATH指定Script的路径,所以必须给予完整的Script路径:

0	14	*	*	*	/usr/home/dru/bin/mycustomscript.sh

提示:

在使用自定义的Script之前,请先确定该Script可以执行并且使用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

crontab(5)有讨论cron使用的环境变数,若Script中含有任何会使用通配符删除档案的指令,那么检查Script可正常在cron的环境运作非常重要。

编辑完成crontab之后储存档案,编辑完的crontab会被自动安装且cron会读取该crontab并在其指定的时指执行其cron job。要列出crontab中有那一些cron job可以使用此指令:

% crontab -l
0	14	*	*	*	/usr/home/dru/bin/mycustomscript.sh

要移除使用在使用者crontab中的cron job可:

% crontab -r
remove crontab for dru? y

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.