logrotate 输出到 /dev/null 两次?

logrotate 输出到 /dev/null 两次?

因此我检查了我的 httpd 的 logrotate 配置,发现其部分postrotate ... endscript内容如下:

/sbin/service httpd reload > /dev/null 2>/dev/null || true

我理解第一个,如果有输出,就将其发送到 /dev/null,但为什么是第二个条目?

我检查了一下,发现 a2>表示将 stderr 发送到文件。因此,如果我理解正确的话,第一个条目告诉脚本发送stdout到 /dev/null,第二个条目告诉脚本stderr发送到 /dev/null,这是正确的吗?

至于|| true,它为什么在那里?

此外,如果&>意味着两者stdout and stderr,我可以替换两个条目并只指定一次以下内容:/sbin/service httpd reload &> /dev/null

答案1

第一次重定向仅涵盖stdout- 错误通常会被发送到stderr,因此仍然会在控制台上结束,而不需要第二次重定向来告诉 shell/dev/null也将错误输出发送到。

“2” 指的是文件描述符:0 是 stdin,1 是 stdout,2 是 stderr,因此> /dev/null是简写,1> /dev/null表示您通常指的是 stdout。执行第二次重定向的另一种方法是2>&1“将 fd 2 的输出发送到 fd 1”(并且 fd 1/dev/null也将发送到此输出)。

|| true表示“或真”。这意味着如果主命令失败,即使运行脚本的 shell 设置为在所有失败的命令上停止,执行也不会停止。该true命令(或 shell 内置命令)不执行任何操作,只是返回一个通常表示成功的值。

因此,本质上这句话的意思是“做 X,但我不关心输出,如果失败了,就继续尝试下一个事情”。

相关内容