2012-04-20 138 views
0

我对cron有某种学习方式,不管我读什么,我都无法理解它。我向我的webhost寻求帮助以创建一个每两小时运行一次python脚本的cron作业。这个cronjob做了什么?

这是他送回去:

0 */2 * * * python /path/to/file.py >> /dev/null 2>&1 

我得到的第一位是说大家小时由两个整除,第二部分是用Python来执行我的文件,剩下的,我不真的不知道。

支持家伙给我发了一封电子邮件,回话说

这意味着,输出和错误将无处重定向到保持 你干净乱码信息,然后将命令输出在cron如果有(有益和 共同)。

要测试脚本功能,请在不重定向的情况下使用相同的功能。

这是有道理的,因为我记得>>在命令提示符下被用来输出写入文件。我仍然没有得到两件事。首先,2>&1是做什么的?第二,通过重定向,他是在说发送输出到/dev/null?如果它没有去那里,我确实想确认它正在工作,它会去哪里?

+0

请阅读:http://en.wikipedia.org/wiki/File_descriptor(这将解释0,1,2)另外,如果你想看到输出重定向到一个文件,例如:/ tmp /somefile.log – 2012-04-20 17:23:56

回答

2

2代表stderr流,它表示将它重定向到流1(stdout)定向的相同位置,即/dev/null(有时称为“位桶”)。

如果你不希望输出到/dev/null,那么你可以在那里放一个文件名,并且stderr和stdout的输出将会在那里。

例:

0 */2 * * * python /path/to/file.py >> your_filename 2>&1 

最后,>>(相对于>)指追加,所以在文件名的情况下,输出将附加的,而不是覆盖该文件。与/dev/null,虽然你无论如何都扔掉输出,这并不重要。

+1

太棒了,谢谢。 – mowwwalker 2012-04-20 17:26:17

2

2>&1会将所有错误输出相同的流作为标准输出(例如,在你的情况下/dev/null =无处)

如果你在一个控制台窗口中运行python /path/to/file.py(如去除输出重定向开始>>)的输出将打印在您的控制台上(以便您可以直观地读取它)

注意:默认情况下,cron作业的输出将作为电子邮件发送给拥有作业的用户。出于这个原因,总是将标准和错误输出指向/dev/null是很常见的。

+0

根据我的经验,'cron'作业通常不会输出到'/ dev/console'。 – 2012-04-20 17:27:47

+0

在控制台窗口中添加关于运行命令的简短说明(输出在控制台中可见)和cron作业输出以电子邮件形式发送 – erikxiv 2012-04-20 17:29:56

0

>>将标准输出附加到/dev/null; 2>&1将文件描述符2(标准错误)发送到文件描述符1(标准输出)正在进行的相同位置。

追加是不寻常的,但实际上并不有害;你通常只会写>。如果你正在处理的是真实文件而不是/dev/null,那么附加效果可能会更好,因此这会减少从/dev/null更改为/tmp/cron/job.log或其他任何内容时遇到问题的可能性。

抛出错误并不一定是个好主意,但是如果该命令是“健谈”,那么该输出通常会以电子邮件的形式发送给工作的用户。

1
  • >>是不必要存在 - 的/ dev/null是不是一个真正的文件,它不会不管你是否使用>>>
  • 2>&1方式发送到STDERR相同的地方标准输出,即/ dev的/ null
  • The man page for cron解释了如果您没有重定向,它会做什么;一般来说,它会向输出的管理员发送电子邮件。
  • 如果你想检查它是否工作,你可以用'say'/ tmp/log'替换'/ dev/null',然后检查该文件。这就是为什么在这个命令中有一个>>:当记录到一个真实文件时,你想要追加每一次而不是覆盖它。