logrotate“后旋转”配置

logrotate“后旋转”配置

下面是两个相同的 logrotate 配置示例,唯一的区别是postroate第二个示例缺少的块>/dev/null 2>&1 || true

/var/log/nftables.log {
  size +10M
  maxage 30
  sharedscripts
  postrotate
    /usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
  endscript
}

/var/log/nftables.log {
  size +10M
  maxage 30
  sharedscripts
  postrotate
    /usr/bin/systemctl kill -s HUP rsyslog.service
  endscript
}

我想知道为什么第二个例子不好(我认为是),请解释一下到底
>/dev/null 2>&1 || true是什么?

我的意思是每个字符的含义:>/dev/nulland 2>&1and ||andtrue

答案1

这是基本bash语法。您应该反复阅读man bash任何 Linux Shell 教程或书籍。

但是,这里是:

>/dev/null将 STDOUT 流重定向到 NULL(无限数据接收器)设备,并将其丢弃。

2>&1将 STDERR 流重定向到 STDOUT(已重定向到/dev/null)。

||是逻辑或运算符。如果(且仅当) 左侧的表达式||失败(返回非零$STATUS),则计算右侧的表达式||并作为整个表达式的结果返回。

true是一个除了返回 SUCCESS 之外什么都不做的程序$STATUS

总而言之,/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true意思是:

执行命令,丢弃输出和错误消息。如果命令成功,则返回 SUCCESS。如果命令失败,则返回 SUCCESS。

请注意:这些postrotate命令由/bin/sh,而不是解释/bin/bash,因此任何 bash 扩展功能都将不起作用。

相关内容