admin 管理员组

文章数量: 887021


2024年2月26日发(作者:structural engineering and mechanics)

crontab命令详解

crontab命令的功能是在一定的时间间隔调度一些命令的执行。在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab。

crontab命令有三种形式的命令行结构:

crontab [-u user] [file]

crontab [-u user] [-e|-l|-r]

crontab -l -u [-e|-l|-r] 第一个命令行中,file是命令文件的名字。如果在命令行中指定了这个文件,那么执行crontab命令,则将这个文件拷贝到crontabs目录下;如果在命令行中没有制定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将他们也存放在crontab目录下。

命令行中-r选项的作用是从/usr/spool/cron/crontabs目录下删除用户定义的文件crontab;

命令行中-l选项的作用是显示用户crontab文件的内容。

使用命令crontab -u user -e命令编辑用户user的cron(c)作业。用户通过编辑文件来增加或修改任何作业请求。

执行命令crontab -u user -r即可删除当前用户的所有的cron作业。

作业与它们预定的时间储存在文件/usr/spool/cron/crontabs/username里。username使用户名,在相应的文件中存放着该用户所要运行的命令。命令执行的结果,无论是标准输出还是错误输出,都将以邮件形式发给用户。文件里的每一个请求必须包含以spaces和tabs分割的六个域。前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,称为命令字段,其中包括了crontab调度执行的命令。

第一道第五个字段的整数取值范围及意义是:

0~59 表示分

1~23 表示小时

1~31 表示日

1~12 表示月份

0~6 表示星期(其中0表示星期日)

/usr/lib/cron/表示谁能使用crontab命令。如果它是一个空文件表明没有一个用户

能安排作业。如果这个文件不存在,而有另外一个文件/usr/lib/cron/,则只有不包括在这个文件中的用户才可以使用crontab命令。如果它是一个空文件表明任何用户都可安排作业。两个文件同时存在时优先,如果都不存在,只有超级用户可以安排作业。

配置 cron

Contributed by Tom Rhodes.

FreeBSD 最有用的软件包(utilities)中的一个是 cron(8)。 cron 软件在后台运行并且经常检查 /etc/crontab 文件。cron 软件也检查 /var/cron/tabs 目录,搜索新的 crontab 文件。这些

crontab 文件存储一些 cron 在特定时间执行任务的信息。

cron 程序使用两种不同类型的配置文件, 即系统 crontab 和用户 crontabs。 两种格式的唯一区别是第六个字段。 在系统 crontab 中,第六个字段是用于执行命令的用户名。 这给予了系统 crontab 以任意用户身份执行命令的能力。 在用户 crontab 中, 第六个字段是要执行的命令,所有的命令都会以这个用户自己的身份执行; 这是一项重要的安全功能。

Note: 同其他用户一样, 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

像大多数 FreeBSD 配置文件一样,# 字符是注释。作为什么和为什么要执行,可以加一个注释来描述以便将来提醒您。注释不能跟命令一样在同一行上否则他们会被看成命令的一部分。注释应该另起一行。空行将会被忽略。

首先应该定义环境变量。等号 (=) 字符用来定义任何环境变量,像这个例子用到了 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

Important: 绝对不要用这种方法来编辑/安装系统 crontab。您需要做的只是使用自己喜欢的编辑器: cron 程序会注意到文件发生了变化, 并立即开始使用新的版本。参见 这个 FAQ

项目 以了解进一步的情况。

要安装刚写好的用户 crontab,首先使用最习惯的编辑器来创建一个符合要求格式的文件,然后用 crontab 程序来完成。最常见的用法是:

% crontab crontab-file

In this example, crontab-file is the filename of a crontab that was previously created.

还有一个选项用来列出安装的 crontab 文件: 只要传递 -l 选项给 crontab 然后看一下输出。

用户想不用模板(已经存在的文件)而直接安装他的 crontab 文件,用 crontab -e 选项也是可以的。它将会启动一个编辑器并且创建一个新文件,当这个文件被保存的时候, 它会自动的用 crontab 来安装这个文件。

如果您稍后想要彻底删除自己的用户 crontab 可以使用 crontab 的 -r 选项。


本文标签: 文件 命令 用户 运行 执行