Contributed by
Tom Rhodes.
FreeBSD 最有用的软件包(utilities)中的一个是
cron
(8)
。
cron
软件在后台运行并且经常检查
/etc/crontab
文件。
cron
软件也检查
/var/cron/tabs
目录,搜索新的
crontab
文件。这些
crontab
文件存储一些
cron
在特定时间执行任务的信息。
cron
程序使用两种不同类型的配置文件, 即系统 crontab
和用户 crontabs。 两种格式的唯一区别是第六个字段。 在系统 crontab
中,第六个字段是用于执行命令的用户名。 这给予了系统 crontab
以任意用户身份执行命令的能力。 在用户 crontab 中, 第六个字段是要执行的命令,
所有的命令都会以这个用户自己的身份执行; 这是一项重要的安全功能。
注意:
同其他用户一样,
root
用户也可以有自己的
crontab。 它不同于
/etc/crontab
(也就是系统 crontab)。
由于有系统 crontab 的存在, 通常并不需要给
root
建立单独的用户
crontab。
让我们来看一下
/etc/crontab
文件:
# /etc/crontab - root's crontab for FreeBSD
# $FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log
#minute hour mday month wday who command
*/5 * * * * root /usr/libexec/atrun
首先应该定义环境变量。等号 (
=
)
字符用来定义任何环境变量,像这个例子用到了
SHELL
,
PATH
和
HOME
变量。如果 shell 行被忽略掉,
cron
将会用默认值
sh
。如果
PATH
变量被忽略, 那么就没有默认值并且需要指定文件绝对位置。如果
HOME
被忽略,
cron
将用用执行者的
home 目录。
这一行定义了七个字段。它们是
minute
、
hour
、
mday
、
month
、
wday
、
who
和
command
。 它们差不多已经说明了各自的用处。Minute
是命令要运行时的分钟,Hour 跟 minute 差不多,只是用小时来表示。Mday 是每个月的天。Month
跟 hour 还有 minute 都差不多,用月份来表示。wday 字段表示星期几。
所有这些字段的值必须是数字并且用24小时制来表示。“who” 字段是特别的,并且只在
/etc/crontab
文件中存在。
这个字段指定了命令应该以哪个用户的身份来运行。当一个用户添加了他(她)的
crontab
文件的时候,他们就会没有这个字段选项。最后,是
command
字段。这是最后的一个字段,
所以自然就是它指定要运行的程序。
最后一行定义了上面所说的值。注意这里我们有一个
*/5
列表,紧跟着是一些
*
字符。
*
字符代表“开始到最后”, 也可以被解释成
每次
。所以,根据这行, 显然表明了无论在何时每隔 5 分钟以
root
身份来运行
atrun
命令。查看
atrun
(8)
手册页以获得
atrun
的更多信息。
命令可以有任意多个传递给它们的标志。无论怎样,
扩展到多行的命令应该用反斜线(“\”)来续行。
这是每个
crontab
文件的基本设置,
虽然它们有一个不同。第六行我们指定的用户名只存在于系统
/etc/crontab
文件。这个字段在普通用户的
crontab
文件中应该被忽略。
重要:
绝对不要用这种方法来编辑/安装系统 crontab。
您需要做的只是使用自己喜欢的编辑器:
cron
程序会注意到文件发生了变化, 并立即开始使用新的版本。参见
这个 FAQ 项目
以了解进一步的情况。
要安装刚写好的用户
crontab
,
首先使用最习惯的编辑器来创建一个符合要求格式的文件,然后用
crontab
程序来完成。最常见的用法是:
%
crontab crontab-file
在前面的例子中,
crontab-file
是一个事先写好的
crontab
。
还有一个选项用来列出安装的
crontab
文件: 只要传递
-l
选项给
crontab
然后看一下输出。
用户想不用模板(已经存在的文件)而直接安装他的 crontab 文件,用
crontab -e
选项也是可以的。
它将会启动一个编辑器并且创建一个新文件,当这个文件被保存的时候, 它会自动的用
crontab
来安装这个文件。
如果您稍后想要彻底删除自己的用户
crontab
可以使用
crontab
的
-r
选项。