8

我只用了一个小时就学会了cron作业的工作原理,这就是我迄今为止所做的。我crontab -e用来添加我的 cron 命令,即:

0/1 * * * * /usr/bin/python /home/my_username/hello.py > /home/my_username/log.txt

crontab -l确认我的命令在那里。

你好.py:

#!/usr/bin/python
# Hello world python program
print "Hello World!"

但我在日志文件中看不到任何内容。有人可以解释我做错了什么吗?

4

2 回答 2

5

实验表明,这0/1似乎是问题所在。

0/1 应该等同于*。如果您替换0/1*,它应该可以工作。

这是我的实验性 crontab:

0/1 * * * * echo 0/1  >> cron0.log
*   * * * * echo star >> cron1.log

这会创建cron1.log但不会cron0.log

我将对此进行调查并尝试找出为什么0/1不起作用,但现在只需使用*它就可以了。

更新:

foo/bar语法特定于 Vixie cron 实现,大多数 Linux 系统和 MacOS X 都使用该语法,但并不通用。

每分钟运行命令的常用方法是仅*在第一个字段中指定。要每 5 分钟运行一次命令,如果您的 cron 支持,请指定*/5.

这是crontab(5)手册页的内容:

步长值可以与范围结合使用。跟随一个范围,/<number>指定跳过该范围内的数字值。例如,0-23/2可以在小时字段中使用以指定每隔一小时执行一次命令(V7 标准中的替代方案是0,2,4,6,8,10,12,14,16,18,20,22)。星号后也允许执行步骤,因此如果您想说“每两个小时”,只需使用*/2.

我什至不确定是什么0/1意思。

更新 2:

好的,这就是我发现的。

鉴于字段 2 到 5 都是*,将第一个字段(指定分钟)设置为*会导致作业每分钟运行一次。 */2每 2 分钟*/3运行一次,每 3 分钟运行一次。这一切都在预料之中。

将第一个字段设置为 、 或 中的任何一个0/10/2导致0/3作业仅在整点运行,即,它等同于0

这不是我从手册页中的描述所期望的。jgritty 回答中的维基百科引用

某些版本的 cron 可能不接受“/”前面的值,如果它不是一个范围,例如“0”。另一种方法是用星号替换零。

似乎并不完全正确,至少对于我正在使用的 Vixie cron 版本而言;毫无怨言地0/1接受了,但这并不意味着我所期望的,而且它似乎并不是特别有用。

于 2013-01-13T20:17:04.347 回答
1

0/1您的 cron 版本的格式似乎错误。

我在维基百科上找到了这个:

某些版本的 cron 可能不接受“/”前面的值,如果它不是一个范围,例如“0”。另一种方法是用星号替换零。

所以基思汤普森的回答应该有效,所以应该:

*/1 * * * *

于 2013-01-13T20:23:59.060 回答