crontab - 为单个用户维护 crontab 文件(Vixie Cron)
概要
crontab [-h]
crontab [-u 用户] [-n] 文件
crontab [-u 用户] [-i] {-e | -l | -r}
描述
crontab 是用于安装、卸载或列出用于驱动 Vixie Cron 中的 cron(8) 守护程序的表。每个用户可以拥有自己的 crontab,尽管这些文件位于 /var/spool/cron/crontabs 中,但不能直接编辑。
如果 /etc/cron.allow 文件存在,则必须将您列在其中(每行一个用户),才能使用此命令。如果 /etc/cron.allow 文件不存在,但 /etc/cron.deny 文件存在,则您不能列在 /etc/cron.deny 文件中,才能使用此命令。
请检查文件 /etc/cron.allow 的权限,确保允许的用户可以读取该文件。例如,权限 rw- r-- r--(八进制 644)应该可以。
如果这两个文件都不存在,则根据站点特定的配置参数,只有超级用户才能使用此命令,或者所有用户都可以使用此命令。
如果同时存在这两个文件,则 /etc/cron.allow 优先。这意味着 /etc/cron.deny 不会被考虑,并且您的用户必须列在 /etc/cron.allow 中才能使用 crontab。
无论这些文件是否存在,root 管理员用户始终允许设置 crontab。对于标准的 Debian 系统,所有用户都可以使用此命令。
如果给出了 -h 选项,crontab 会显示帮助消息并立即退出。
如果给出了 -u 选项,则它指定了要使用(在列出时)或修改(在编辑时)的用户的 crontab。如果未给出此选项,crontab 会检查“您”的 crontab 文件,即执行命令的人的 crontab 文件。请注意,su(8) 可能会使 crontab 混淆,如果您在 su(8) 中运行,则应始终使用 -u 选项以确保安全。
此命令的第一种形式用于从某个命名文件或标准输入安装新的 crontab(如果给出了伪文件名“-”)。
如果给出了 -n 选项,则表示“模拟运行”:crontab 检查“您”的 crontab 是否具有正确的语法,如果语法正确,则输出成功消息,但不会将任何内容写入任何 crontab。
-l 选项导致当前 crontab 显示在标准输出上。请参阅下面“DEBIAN 特定”部分中的说明。
-r 选项导致删除当前的 crontab。
-e 选项用于使用 sensible-editor(1) 编辑当前的 crontab。退出编辑器后,修改后的 crontab 将自动安装。
-i 选项修改 -r 选项,以便在实际删除 crontab 之前提示用户输入“y/Y”响应。
DEBIAN 特有
crontab -l 的“开箱即用”行为是显示放置在 crontab 顶部的三行“请勿编辑此文件”标题,即在安装 crontab 时。问题在于,这使得以下序列
crontab -l | crontab 变得非幂等——您会不断添加标题的副本。这给使用 sed 编辑 crontab 的脚本带来了麻烦。因此,-l 选项的默认行为已更改为不输出此类标题。您可以通过将环境变量 CRONTAB_NOHEADER 设置为“N”来获得原始行为,这将导致 crontab -l 命令发出额外的标题。
高亮显示 CRONTAB -L 的输出
crontab -l 命令输出纯文本。当 tty 支持 ANSI 序列以对该文本进行颜色化时,可以通过以下方式高亮显示输出:crontab -l | spc -t crontab,当 tty 背景为深色时;或者 crontab -l | spc -t crontab-light,当该背景为浅色时。
可以使用自定义版本的 /etc/supercat/spcrc-crontab* 文件来修改高亮显示方案。
您还可以使用 bat 包提供的 batcat(1) 程序对该文本进行颜色化,以下是一个示例:
crontab -l | batcat --language Crontab
参见
crontab(5),cron(8),spc(1)
文件
/etc/cron.allow,/etc/cron.deny 如果 /etc/cron.allow 和 /etc/cron.deny 文件存在,则它们必须是世界可读的,或者可供“crontab”组读取。如果不是,则 cron(8) 将拒绝所有用户的访问,直到修复权限。
/var/spool/cron/crontabs 在 /var/spool/cron/crontabs 目录中,每个用户都有一个 crontab 文件。不允许用户直接编辑该目录中的文件,以确保只有系统允许运行定期任务的用户才能添加它们,并且只有语法正确的 crontab 才会写入其中。这通过使该目录仅对“crontab”组具有写入权限,并为该特定组配置 crontab 命令,使其设置了 setgid 位来实现。
标准
crontab 命令符合 IEEE Std1003.2-1992(“POSIX”)。这种新的命令语法与以前版本的 Vixie Cron 以及经典的 SVR3 语法不同。
诊断
如果您使用错误的命令行运行它,则会出现一条相当有用的用法消息。
cron(8) 要求 crontab 中的每个条目都以换行符结尾。如果 crontab 中的最后一个条目缺少换行符,则 cron(8) 将认为该 crontab(至少部分)已损坏,并且拒绝安装它。
/var/spool/cron/crontabs 下的文件基于用户的帐户名。对于帐户已更改的用户(无论是由于本地系统中的更改还是因为它们通过外部用户数据库(例如 LDAP 目录)进行管理),将不会运行 crontab 作业。
作者
Paul Vixie <_> 编写了这份手册页(1994 年)。
Steve Greenland <_> 维护了该软件包(1996-2005 年)。
Javier Fernández-Sanguino Peña <_> 维护了该软件包(2005-2014 年)。
Christian Kastner <_> 维护了该软件包(2010-2016 年)。
Georges Khaznadar <_> 维护了该软件包(2022-2024 年)。
版权
版权所有 © 1994 Paul Vixie
可以自由分发,但有以下限制:不要从源代码或文档中删除我的名字(不要将我的工作据为己有),标记你的修改(不要让我承担你可能产生的错误的责任),不要更改或删除此通知。如果提供可构建的源代码给购买者,则可以出售。不提供任何形式的保证,包括明示或暗示的保证;使用此软件的风险由您自行承担,因使用此软件而对任何人造成的任何损害的全部责任由用户承担。
自 1994 年以来,对这份手册页进行了许多修改,由 Debian 开发者编写,他们维护了 cron(TM);以上是一个简短的列表,更多信息可以在文件 /usr/share/doc/cron/copyright 中找到。