所以我正在检查我的logrotateconfiguration为httpd,并在postrotate ... endscript部分它有以下内容:
/sbin/service httpd reload > /dev/null 2>/dev/null || true
我了解第一个,如果有输出,发送到/ dev / null,但为什么第二个条目?
我检查了2>意味着stderr文件。 所以,如果我理解正确,第一个条目告诉脚本将stdout发送到/ dev / null,第二个stderr到/ dev / null,这是正确的吗?
至于|| true || true ,为什么呢?
另外,如果&>表示stdout and stderr都可以,我可以replace两个条目,只需指定一次以下内容: /sbin/service httpd reload &> /dev/null ?
第一个redirect只是覆盖了stdout – 错误通常发送到stderr所以仍然会在控制台上结束,而没有第二个redirect,它告诉shell将错误输出发送到/dev/null 。
“2”是指文件描述符:0是标准input,1是标准输出,2是标准错误,所以> /dev/null是1> /dev/null缩写,假设您通常表示为stdout。 另一种做第二次redirect的方法是2>&1 ,意思是“发送输出到fd 2到fd 1”(并且fd 1将去/dev/null这个输出也是)。
|| true || true意思是“或真”。 这意味着如果主命令失败,即使运行脚本的shell设置为停止所有失败的命令,执行也不会停止。 true命令(或内置的shell)只会返回一个通常表示成功的值。
所以基本上这句话说:“做X,但我不关心输出,如果失败就继续下一步”。