Shell 这个工作做什么?

Shell 这个工作做什么?,shell,ssh,cron,Shell,Ssh,Cron,我对cron有一些学习障碍,无论我读什么,我都无法理解它。我请求我的网络主机帮助创建一个cron作业,每两小时运行一个python脚本 这是他寄回来的: 0 */2 * * * python /path/to/file.py >> /dev/null 2>&1 我明白了,第一部分是说每个人的小时都可以被2整除,第二部分是用python来执行我的文件,其余的,我真的不知道 支持人员给我回了一封邮件说 这意味着stdout和stderr将被重定向到无处保存 清除乱码消息和

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

这是他寄回来的:

0 */2 * * * python /path/to/file.py >> /dev/null 2>&1
我明白了,第一部分是说每个人的小时都可以被2整除,第二部分是用python来执行我的文件,其余的,我真的不知道

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

这意味着stdout和stderr将被重定向到无处保存 清除乱码消息和命令输出(如果有)(有用和有用) 在cron中常见)

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


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

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

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

例:


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

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

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

例:


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

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

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


注意:默认情况下,cron作业的输出将作为电子邮件发送给拥有该作业的用户。因此,通常会将标准和错误输出定向到
/dev/null
2>&1
将所有错误输出重定向到与标准输出相同的流(例如,在您的情况下,定向到
/dev/null
=无处)

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


注意:默认情况下,cron作业的输出将作为电子邮件发送给拥有该作业的用户。因此,通常将标准输出和错误输出直接指向
/dev/null
>
将标准输出附加到
/dev/null
2>&1
将文件描述符2(标准错误)发送到文件描述符1(标准输出)要发送的位置

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


扔掉错误不一定是个好主意,但如果命令是“闲聊”的,那么输出通常会以电子邮件的形式发送给其
cron
作业的用户。

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

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

扔掉错误不一定是个好主意,但如果命令是“闲聊”的,那么输出通常会以电子邮件的形式发送给其
cron
作业的用户。

  • >
    在那里是不必要的-/dev/null不是真正的文件,无论您使用
    还是
    >
  • 2>&1
    表示将STDERR发送到与STDOUT相同的位置,即/dev/null
  • 解释如果没有重定向,它会做什么;通常,它会向管理员发送带有输出的电子邮件
  • 如果您想检查它是否正常工作,可以将“/dev/null”替换为实际的文件“say”/tmp/log”,然后检查该文件。这就是为什么命令中有一个
    >
    :当登录到一个真实的文件时,您希望每次都附加它,而不是覆盖它
      • >
        在那里是不必要的-/dev/null不是真正的文件,无论您使用
        还是
        >
      • 2>&1
        表示将STDERR发送到与STDOUT相同的位置,即/dev/null
      • 解释如果您不这样做,它会做什么
        0 */2 * * * python /path/to/file.py >> your_filename 2>&1