手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

crontab (1)

名称

crontab - 用户 crontab 文件

用法概要

/usr/bin/crontab [filename]
/usr/bin/crontab -e [
username]
/usr/bin/crontab -l [
username]
/usr/bin/crontab -r [
username]
/usr/xpg4/bin/crontab [filename]
/usr/xpg4/bin/crontab -e [
username]
/usr/xpg4/bin/crontab -l [
username]
/usr/xpg4/bin/crontab -r [
username]
/usr/xpg6/bin/crontab [filename]
/usr/xpg6/bin/crontab -e [
username]
/usr/xpg6/bin/crontab -l [
username]
/usr/xpg6/bin/crontab -r [
username]

描述

crontab 实用程序使用 cron 通过复制、创建、列出和删除 crontab 文件来管理用户的访问权限(请参见cron(1M))。如果调用时未指定任何选项,则 crontab 会将指定的文件或者标准输入(如果未指定文件)复制到存储着所有用户的 crontab 的目录中。

如果调用 crontab 时指定了 filename,则这将为调用该命令的用户覆盖现有的 crontab 条目。

crontab 访问控制

用户:在以下情况下允许用户访问 crontab

  • 如果用户的名字出现在 /etc/cron.d/cron.allow 中。

  • 如果 /etc/cron.d/cron.allow 不存在并且用户的名字不在 /etc/cron.d/cron.deny 中。

用户:在以下情况下拒绝用户访问 crontab

  • 如果 /etc/cron.d/cron.allow 存在并且用户的名字不在其中。

  • 如果 /etc/cron.d/cron.allow 不存在并且用户的名字在 /etc/cron.d/cron.deny 中。

  • 如果两个文件都不存在,则只允许具有 solaris.jobs.user 授权的用户提交作业。

  • 如果启用了 Solaris 审计功能,则不会审核用户的 shell 并且用户不是 crontab 所有者。如果用户通过未设置审核参数的某个程序(例如某些版本的 SSH)登录,则可能会发生此情况。

只有 allow/deny 文件存在时,针对 allowdeny 的规则才会应用于 root

allow/deny 文件中每行包含一个用户名。

crontab 条目格式

crontab 文件的每行中都包含六个字段。这些字段由空格或制表符分隔。前五个字段是指定了以下内容的整数模式:

minute (0−59),
hour (0−23),
day of the month (1−31),
month of the year (1−12),
day of the week (0−6 with 0=Sunday).

这些模式中的每一个都可以是一个星号(表示所有合法值)或由逗号分隔的元素列表。每个元素可以是一个数字,也可以是由减号分隔的两个数字(表示一个内含范围)。此处指定的时间将按当前处于活动状态的时区进行解释。在 crontab 文件的顶部,这是在 /etc/default/init 中在系统范围内设置的时区。用户可以添加如下所示的行:

TZ=timezone

...并且所有后续条目都将使用该时区进行解释,直至遇到新的 TZ=timezone 行。天的指定可以通过两个字段来完成(月中的天和周中的天)。如果指定为元素列表,则将同时遵循两者。请参见“示例”部分。

crontab 文件的行中的第六个字段是一个字符串,由 shell 在指定的时间执行。此字段中的百分比字符将被转换为一个 NEWLINE 字符(除非通过 \  进行转义)。

Shell 将仅执行命令字段的第一行(直至 ` % ' 或行的末尾)。其他行将作为标准输入提供给命令。任何空行或者以 ` # ' 开头的行都是注释并且将被忽略。

将从 $HOME 目录调用 shell。与 $TZ 一样,可以通过使用如下所示的行设置 $SHELL 和 $HOME:

SHELL=/usr/bin/someshell

...或者:

HOME=somedirectory

...对于 crontab 中的所有剩余条目,都将优先使用此设置,直到遇到另一个 HOMESHELL 条目。调用它时将使用当前生效的 $SHELL 的基名 arg0。希望执行其 .profile 或等效文件的用户必须在 crontab 文件中显式执行此工作。cron 为每个 shell 提供了缺省环境,定义了 HOME、LOGNAME、SHELL、TZ 和 PATH。用户 cron 作业的缺省 PATH 是 /usr/bin;而 root cron 作业缺省为 /usr/sbin:/usr/bin。可以在 /etc/default/cron 中设置缺省 PATH(请参见 cron(1M))。TZ、HOME 和 SHELL 环境变量设置为与 crontab 文件中当时生效的那些设置相匹配。

如果您没有重定向您的命令的标准输出和标准错误,则会将所生成的任何输出或错误通过邮件发送给您。

crontab 环境变量

支持以下变量:

HOME

允许用户在运行命令之前选择要将目录更改到的备用 cron 目录。例如:

HOME=/var/tmp
SHELL

要用来运行后续命令的 shell 的名称。例如:

SHELL=/usr/bin/ksh
TZ

允许用户选择在其中运行 cron 条目的时区。这将同时影响所运行命令的环境和条目的计时。例如,要使用 Iceland 的时区运行您的条目,请使用:

TZ=Iceland

这些变量中的每一个都将影响 crontab 文件中位于其后的所有行,直至该变量被重新设置它的某个后续行重新设置。因此,在单个 crontab 文件中可以支持多个时区。

未设置这些环境变量的行与符合 UNIX 标准的 crontab 条目相同,这类行将在本手册页的其他位置进行描述。

跨时区设置 cron 作业

cron 守护进程的缺省时区为 cron 条目设置系统范围的时区。此缺省的系统范围值使用 /etc/default/init 设置。

如果使用某种形式的夏时制夏季/冬季时间,则计划在切换期间执行的作业可以执行一次、两次或根本不执行。

选项

支持以下选项:

–e

编辑当前用户的 crontab 文件的副本,或者创建一个要编辑的空文件(如果 crontab 不存在)。当编辑完成时,该文件将安装为用户的 crontab 文件。

环境变量 EDITOR 确定 –e 选项调用哪个编辑器。所有 crontab 作业都应当使用 crontab 进行提交。不要仅仅通过编辑 crontab 文件来添加作业,因为 cron 无法识别通过此方式所做的更改。

如果 crontab 文件中的所有行都被删除,则会恢复旧的 crontab 文件。删除所有行的正确方法是使用 –r 选项删除 crontab 文件。

如果指定了 username,则将编辑指定用户的 crontab 文件,而不是当前用户的 crontab 文件。这只能由 root 或具有 solaris.jobs.admin 授权的用户来执行。

–l

列出调用方用户的 crontab 文件。只有 root 或具有 solaris.jobs.admin 授权的用户可以在 –l 选项后指定用户名来列出指定用户的 crontab 文件。

–r

crontab 目录中删除用户的 crontab。只有 root 或具有 solaris.jobs.admin 授权的用户可以在 –r 选项后指定用户名来删除指定用户的 crontab 文件。

示例

示例 1 清除核心文件

此示例在每个工作日的早上 3:15 清除 core 文件:


15 3 * * 1-5 find $HOME -name core 2>/dev/null | xargs rm –f 
示例 2 发送生日祝贺邮件

此示例通过邮件发送生日祝贺:

0 12 14 2 * mailx john%Happy Birthday!%Time for lunch.
示例 3 指定月中的天和周中的天

此示例在每月的第一天和第十五天以及每周一运行某个命令:

0 0 1,15 * 1

要仅通过一个字段来指定天,应当将其他字段设置为 *。例如:

0 0 * * 1

将仅在每周一运行某个命令。

示例 4 使用环境变量

以下条目利用了 crontab 对特定环境变量的支持。

TZ=GMT
HOME=/local/home/user
SHELL=/usr/bin/ksh
0 0 * * * echo $(date) >        midnight.GMT
TZ=US/Pacific
0 0 * * * echo $(date) >        midnight.PST
TZ=US/Eastern
HOME=/local/home/myuser
SHELL=/bin/csh

前面的条目允许运行两个作业。第一个将在 GMT 时区的午夜运行,第二个将在 PST 时区的午夜运行。两者都将在目录 /local/home/user 中使用 Korn shell 运行。文件末尾的 TZ、HOME 和 SHELL 条目将这些变量恢复为其缺省值。

环境变量

有关影响 crontab 执行的以下环境变量的描述,请参见environ(5):LANG、LC_ALL、LC_CTYPE、LC_MESSAGES 和 NLSPATH。

/usr/bin/crontab

EDITOR

确定当指定了 –e 选项时要调用的编辑器。这将被 VISUAL 环境变量覆盖。缺省编辑器是 vi(1)

PATH

crontab 的环境中的 PATH 指定用于查找编辑器的搜索路径。

VISUAL

确定当指定了 –e 选项时要调用的可视化编辑器。如果未指定 VISUAL,则将使用环境变量 EDITOR。如果未设置该环境变量,则缺省值为 vi(1)

/usr/xpg4/bin/crontab

EDITOR

确定当指定了 –e 选项时要调用的编辑器。缺省编辑器是 /usr/xpg4/bin/vi

/usr/xpg6/bin/crontab

EDITOR

确定当指定了 –e 选项时要调用的编辑器。缺省编辑器是 /usr/xpg6/bin/vi

退出状态

将返回以下退出值:

0

成功完成。

>0

出现错误。

文件

/etc/cron.d

主 cron 目录

/etc/cron.d/cron.allow

所允许用户的列表

/etc/default/cron

包含 cron 缺省设置

/etc/cron.d/cron.deny

被拒绝用户的列表

/var/cron/log

记帐信息

/var/spool/cron/crontabs

crontab 的假脱机区域

属性

有关下列属性的说明,请参见 attributes(5)

/usr/bin/crontab

属性类型
属性值
可用性
system/core-os
接口稳定性
Committed(已确定)
标准
请参见 standards(5)

/usr/xpg4/bin/crontab

属性类型
属性值
可用性
system/xopen/xcu4
接口稳定性
Standard(标准)

/usr/xpg6/bin/crontab

属性类型
属性值
可用性
system/xopen/xcu6
接口稳定性
标准

另请参见

atq(1)atrm(1)auths(1)ed(1)sh(1)vi(1)cron(1M)su(1M)auth_attr(4)attributes(5)environ(5)standards(5)

附注

如果您无意中输入了不带参数的 crontab 命令,请不要尝试通过 Ctrl-d 退出。这会删除您的 crontab 文件中的所有条目。您应改用 Ctrl-c 退出。

当更新 cron 时,请首先检查可能在接近更新时调度的 crontab 条目。如果更新进程在调度的事件之后完成,则此类条目可能会丢失。之所以会发生这种情况是因为,当 crontab 通知 cron 更新用户的 crontab 文件的内部视图时,它首先会删除用户的现有内部 crontab 和任何已调度的内部事件。然后,它读取新的 crontab 文件并重新生成内部 crontab 和事件。这最后一个步骤颇费时间,尤其是对于很大的 crontab 文件,并且可能在调度运行的某个现有 crontab 条目之后才能完成(如果该条目的调度事件接近更新时间)。为安全起见,请至少滞后于当前日期和时间 60 秒再启动新作业。

同时对同一个 crontab 文件进行多项修改可能会导致意想不到的结果。

在向 crontab 文件添加 TZ、SHELL 和 HOME 变量时,如果该 crontab 文件可能被不期望更改这些变量的缺省值的应用程序共享,请务必小心。在文件的末尾将这些值重置为其缺省值可以最大限度地降低发生问题的风险。