Bash 具有无效值的crontab

Bash 具有无效值的crontab,bash,crontab,Bash,Crontab,在我的bash脚本中有一行代码,如下所示 echo "2 30 * * * * /usr/bin/test.sh" >> /var/cron/crontabs/root 这显然为crontab添加了一个作业,但由于第二个值应该在0-23之间。在这种情况下会发生什么?没有保证,因为这是非法的。手册页上的这句话表明它将被忽略: 请注意,这意味着不存在的时间(如夏令时转换期间的“缺失时间”)将永远不匹配,从而导致在“缺失时间”期间计划的作业无法运行。类似地,多次发生的时间(在夏令时转换期

在我的bash脚本中有一行代码,如下所示

echo "2 30 * * * * /usr/bin/test.sh" >> /var/cron/crontabs/root

这显然为crontab添加了一个作业,但由于第二个值应该在0-23之间。在这种情况下会发生什么?

没有保证,因为这是非法的。手册页上的这句话表明它将被忽略:

请注意,这意味着不存在的时间(如夏令时转换期间的“缺失时间”)将永远不匹配,从而导致在“缺失时间”期间计划的作业无法运行。类似地,多次发生的时间(在夏令时转换期间也是如此)将导致匹配作业运行两次

但是,它给出的示例是更合理的场景(例如,您指定在春季DST日当地时间凌晨2:30运行命令,此时没有凌晨2:30)。手册页还说,小时数必须是0-23,你已经违反了这一规则。有可能
cron(8)
会在系统日志中抱怨,或崩溃,或做任何其他事情。它也有可能被忽略,而且这种行为可能会因Unix风格的不同而有所不同


简言之,你处在一个未知的领域。实际上,它可能不会完全崩溃,因为守护进程不应该崩溃。但除此之外,你几乎没有什么保证。

什么都没有
cron
将拒绝运行该行(不是因为0-23问题),而是因为它是一个无效的时间规范,试图包含6参数,而正确的
cron
条目有5

crontab entry format:

  * * * * * command_to_execute
  | | | | |
  | | | | +- day of week  (0-6) (Sunday = 0)
  | | | +--- month        (1-12)
  | | +----- day of month (1-31)
  | +------- hour         (0-23)
  +--------- minute       (0-59)
无论值是多少,以下操作都不起作用:

"2 30 * * * * /usr/bin/test.sh"

当你自己尝试时会发生什么?
230****
是一个太多的字段。这不是编写cronjob的方法。相反,请使用
crontab-e
。当您编写此命令(或任何错误命令)时,您将收到一条错误消息,如
“/tmp/crontab.R4mE4g”:2:bad command
,crontab文件中的
错误,无法安装。
我认为它不会运行,因为30小时不是有效时间。我认为cron不会意识到时间域太多。我认为它将尝试以命令的形式执行
*
——在将它扩展到主目录中的文件列表之后。如果第一个文件名恰好与有效的命令名匹配,则应执行该命令。(现在我得试试看它是否真的有效。)。。。不,我得到了“crontab文件中的错误,无法安装”。哦,好吧。但是在Solaris 9(使用非Vixie crontab实现)上,它实际上可以工作。并且
$PATH
设置为
/usr/bin:
(带有一个隐式尾随
),因此通过执行命令
*
,它实际上执行我的主目录中列出的第一个文件,所有其他文件的名称作为参数。通配符不是很有趣吗!