我对cron有一些学习障碍,无论我读什么,我都无法理解它。我从我的webhost请求帮助创建一个每两个小时运行一个python脚本的cron作业。
这是他发回的内容:
0 */2 * * * python /path/to/file.py >> /dev/null 2>&1
我得到的第一点是说每个小时可以被2整除,第二部分是使用python来执行我的文件,剩下的,我真的不知道。
支持人员给我发了一封电子邮件说
这意味着stdout和stderr将无处可重定向 你清理乱码消息,并命令输出(如果有的话)(有用和 常见于cron)。
要测试脚本功能,请在不重定向的情况下使用相同的功能。
这是有道理的,因为我记得在命令提示符中使用>>
将输出写入文件。我仍然没有得到两件事。首先,2>&1
做了什么?第二,通过重定向,他是在谈论将输出发送到/dev/null
?如果它没有去那里,我确实想确认它有效,它会去哪里?
答案 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 >>
的原因:当记录到真实文件时,您希望每次都附加而不是覆盖它。答案 3 :(得分:0)
>>
将标准输出附加到/dev/null
; 2>&1
将文件描述符2(标准错误)发送到文件描述符1(标准输出)所在的相同位置。
附加物是不寻常的但实际上并不有害;你通常只写>
。如果您处理的是真实文件而不是/dev/null
,那么追加可能会更好,因此当您从/dev/null
更改为/tmp/cron/job.log
或其他任何内容时,这可以减少遇到问题的几率。
抛弃错误不一定是个好主意,但如果命令是“chatty”,那么该输出通常会以电子邮件的形式发送给cron
工作的用户。