我尝试执行如下命令:
*/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
。
在月份和星期几字段中,您可以使用缩写为前三个字母的月份名称或星期几名称(Jan
,Feb
,...,Dec
或Mon
,Tue
,...,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 等较旧的专有操作系统支持。