让 crontab 在 0 点运行

让 crontab 在 0 点运行

我尝试执行如下命令:

*/10 0,1 * * * $BPY some_script.py

意思是我想运行它每 10 分钟0:00 至 1:00 之间。

但是:我在 /var/log/cron 中看到它没有执行。而且:它是唯一一个没有执行的任务(所以我的 cron 在其他情况下运行良好)。操作系统是 Debian GNU/Linux 6.0。

我做错了什么?零点是不是不好的时间?

更新:$BPY 仅保存 Python 可执行文件的路径。其他命令也使用它,并且运行良好。

好吧,如果这是真的错误命令- 它至少会出现在 /var/log/cron 中

更新2:该脚本与其他脚本配合良好hours(例如,* * * * * 每分钟完美运行它,它完全按照我想要的方式运行)

答案1

看起来 cron 尚未定义$BPY。是否some_script.py需要执行? 的用途是什么$BPY?此外,您可能需要脚本的完整路径,而不仅仅是脚本本身的名称。

假设这some_script.py是真正想要执行的脚本,那么尝试执行该脚本(使用完整路径!!)

在本答案下方的评论中,您说的$BPY是 Python 的路径。您不应该这样做,而应该使用 来shebang指定要使用的解释器的完整路径。指定 python 的常见 shebang 是: #!/usr/bin/python。这应该是文件的第一行some_script.py

就语法而言……

Cron 格式是一种简单但功能强大且灵活的方法,用于定义各种操作的时间和频率。

cron 格式由空格分隔的字段组成:

[分钟] [小时] [日期] [月份] [星期几]

下图显示了它的组成部分:

* * * * *
| | | | |
| | | | +---- 星期几(范围:0-6,0 代表星期日;星期一、星期二等。
| | | | 大多数操作系统将星期日识别为 0 或 7)
| | | +------ 月份(范围:1-12 或一月、二月等)
| | +-------- 月份中的日期(范围:1-31)
| +---------- 小时(范围:0-23)
+------------ 分钟(范围:0-59)

这 6 个字段中的任何一个都可以是星号 ( *)。这意味着可能值的整个范围,即每分钟、每小时等。在前四个字段中。

任何字段可能包含用逗号分隔的值列表(例如1,3,7)或值范围(用连字符分隔的两个整数,例如1-5)。

在星号 ( *) 或数值范围之后,您可以使用字符/来指定数值以一定的间隔重复出现。例如,您可以0-23/2在小时字段中写入以指定每两小时执行一次某项操作(其效果与 相同0,2,4,6,8,10,12,14,16,18,20,22)。分钟字段中的值*/4表示该操作应每 4 分钟执行一次。1-30/3与 相同1,4,7,10,13,16,19,22,25,28

在月份和星期几字段中,您可以使用缩写为前三个字母的月份名称或星期几名称(JanFeb,...,DecMonTue,...,Sun)来代替其数字值。

或者,您可以使用特殊关键字代替上面指定的前 5 个字段:

字符串含义
------ -------
@reboot 启动时运行一次。
@yearly 每年运行一次,“0 0 1 1 *”。
@annually (与 @yearly 相同)
@monthly 每月运行一次,“0 0 1 * *”。
@weekly 每周运行一次,“0 0 * * 0”。
@daily 每天运行一次,“0 0 * * *”。
@midnight (与 @daily 相同)
@hourly 每小时运行一次,“0 * * * *”。

这种替代格式不受 SCO Unix 等较旧的专有操作系统支持。

相关内容