为什么 crontab 可以使用通配符 (*) 而不能使用数字?

为什么 crontab 可以使用通配符 (*) 而不能使用数字?

我想每天 10:25(具体时间并不重要)在我的 Raspberry Pi(运行 Raspbian Jessie)上运行一个脚本。

对于该行:25 10 * * * /home/pi/test.sh 它没有给出任何结果,没有输出,也没有活动日志。

我尝试了一下* * * * * /home/pi/test.sh,奇迹发生了!它工作得很好,CMD (/home/pi/test.sh)在 cron 日志中生成,并创建所需的输出文件。

我用于测试目的的脚本:

#!/bin/bash
echo `date` > /home/pi/test.txt

有人知道为什么 cron 不运行脚本吗?

答案1

为了简化起见,我将工作列为:

25 10 * * * date > /home/pi/test.txt

该活动将于上午 10:25 运行。如果此时没有运行,请检查时区/etc/default/cron并根据需要进行更改。更改后您将需要重新启动该服务service cron restart

答案2

来自 crontab 联机帮助页

当分钟、小时和月份字段与当前时间匹配,并且两个日期字段(月份中的某一天或星​​期几)中至少有一个与当前时间匹配时,由 cron(8) 执行命令

您需要拥有其中一个日期字段。如果您希望它在每天 10:25 运行,只需使用

25 10 * * 0-6 /home/pi/test.sh

编辑:这实际上是不正确的,因为所有 * 都将 crontab 标记为每分钟执行一次。我们发现这是系统时间问题。仔细检查您的系统时间。 cron 守护进程在 UTC 之外运行。由于当您将所有字段设置为 * 时脚本有效,因此我们知道实际逻辑正在工作。

相关内容