0

我对 cron 有某种学习块,无论我读什么,我都无法理解它。我向我的虚拟主机寻求帮助,以创建一个每两个小时运行一次 python 脚本的 cron 作业。

这是他发回的:

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

我知道第一部分是说每个小时都可以被 2 整除,第二部分是使用 python 执行我的文件,其余的,我真的不知道。

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

这意味着 stdout 和 stderr 将无处重定向,以使您清除乱码消息和命令输出(如果有)(在 cron 中有用且常见)。

要测试脚本功能,请使用相同的脚本而不进行重定向。

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

4

4 回答 4

2

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

如果您不希望输出转到/dev/null,例如,您可以将文件名放在那里,stderr 和 stdout 的输出将放在那里。

前任:

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

最后,>>(相对于>)表示追加,因此在文件名的情况下,输出将被追加而不是覆盖文件。使用/dev/null,这并不重要,因为无论如何你都会丢弃输出。

于 2012-04-20T17:23:42.520 回答
2

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

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

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

于 2012-04-20T17:24:36.427 回答
1
  • >>那里是不必要的 - /dev/null 不是真正的文件,无论您使用>还是>>
  • 2>&1表示将 STDERR 发送到与 STDOUT 相同的位置,即 /dev/null
  • cron 的手册页解释了如果你没有重定向它会做什么;通常,它会通过电子邮件向管理员发送输出。
  • 如果你想检查它是否正常工作,你可以用一个实际的文件替换'/dev/null',比如'/tmp/log',然后检查那个文件。这就是>>命令中有 a 的原因:登录到真实文件时,您希望每次都追加而不是覆盖它。
于 2012-04-20T17:27:06.560 回答
0

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

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

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

于 2012-04-20T17:25:28.767 回答