你好世界Cron的工作没有用

时间:2013-01-13 19:55:45

标签: python unix cron crontab

我只有一个小时的时间学习cron工作如何工作,这就是我迄今为止所做的工作。我正在使用crontab -e添加我的cron命令,即:

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

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

Hello.py:

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

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

2 个答案:

答案 0 :(得分:4)

实验表明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/20/3中的任何一个都会导致作业仅在一小时内运行,即它仅相当于{{1 }}

这不是我对手册页中的描述所期望的。 Wikipedia quote中的jgritty's answer

  

某些版本的cron可能不接受“/”之前的值   不是范围,例如“0”。另一种方法是取代零   用星号。

似乎并不完全正确,至少我正在使用的Vixie cron版本; 0在没有投诉的情况下被接受,但这并不意味着我所期望的并且它似乎没有特别有用。

答案 1 :(得分:1)

对于您的cron版本,

0/1似乎格式错误。

我在wikipedia上找到了这个:

  

某些版本的cron可能不接受&#34; /&#34;之前的值。如果不是范围,   例如&#34; 0&#34;。另一种方法是用星号替换零。

因此Keith Thompson的答案应该有效,所以应该这样做:

*/1 * * * *