这个cronjob做什么?

时间:2012-04-20 17:20:27

标签: shell ssh cron

我对cron有一些学习障碍,无论我读什么,我都无法理解它。我从我的webhost请求帮助创建一个每两个小时运行一个python脚本的cron作业。

这是他发回的内容:

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

我得到的第一点是说每个小时可以被2整除,第二部分是使用python来执行我的文件,剩下的,我真的不知道。

支持人员给我发了一封电子邮件说

  

这意味着stdout和stderr将无处可重定向   你清理乱码消息,并命令输出(如果有的话)(有用和   常见于cron)。

     

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

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

4 个答案:

答案 0 :(得分: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 :(得分:2)

2>&1将所有错误输出重定向到与标准输出相同的流(例如,在您的情况下转移到/dev/null =无处)

如果您在控制台窗口中运行python /path/to/file.py(例如,删除以>>开头的输出重定向),输出将打印在您的控制台上(因此您可以直观地阅读)

注意:默认情况下,cron作业的输出将作为电子邮件发送给拥有该作业的用户。因此,始终将标准和错误输出定向到/dev/null非常常见。

答案 2 :(得分:1)

  • >>在那里是不必要的 - / dev / null不是真实文件,无论您使用>还是>>
  • 都无关紧要
  • 2>&1表示将STDERR发送到与STDOUT相同的位置,即/ dev / null
  • The man page for cron说明如果您没有重定向,它会怎么做;通常,它会通过输出向管理员发送电子邮件。
  • 如果您想检查它是否正常工作,您可以将'/ dev / null'替换为实际文件'say'/ tmp / log',然后检查该文件。这就是命令中有>>的原因:当记录到真实文件时,您希望每次都附加而不是覆盖它。

答案 3 :(得分:0)

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

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

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