Bash 具有无效值的crontab
在我的bash脚本中有一行代码,如下所示Bash 具有无效值的crontab,bash,crontab,Bash,Crontab,在我的bash脚本中有一行代码,如下所示 echo "2 30 * * * * /usr/bin/test.sh" >> /var/cron/crontabs/root 这显然为crontab添加了一个作业,但由于第二个值应该在0-23之间。在这种情况下会发生什么?没有保证,因为这是非法的。手册页上的这句话表明它将被忽略: 请注意,这意味着不存在的时间(如夏令时转换期间的“缺失时间”)将永远不匹配,从而导致在“缺失时间”期间计划的作业无法运行。类似地,多次发生的时间(在夏令时转换期
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:
(带有一个隐式尾随
),因此通过执行命令*
,它实际上执行我的主目录中列出的第一个文件,所有其他文件的名称作为参数。通配符不是很有趣吗!