以下は、2 つの同じ logrotate 構成例です。唯一の違いは、postroate
2番目の例では欠落しているブロックです。>/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
2番目の例がなぜ悪いのだろうか。 (私の考えでは悪いようです。)それが何であるかを説明してもらえますか?
各文字の意味は>/dev/null
次2>&1
のとおり||
です。true
答え1
これが基本bash
構文です。man bash
Linux Shellのチュートリアルや本を読んで、また読んでください。
しかし、ここにあります:
>/dev/null
STDOUTストリームを無限データシンク(NULL)デバイスにリダイレクトして削除します。
2>&1
STDERRストリームをSTDOUTにリダイレクトします(にリダイレクトされます/dev/null
)。
||
論理OR演算子です。左式が||
失敗した場合にのみ(ゼロ以外の値を返す$STATUS
)、右式が評価され、式||
全体の結果として返されます。
true
SUCCESSのみを返すプログラムです$STATUS
。
概して次のことを/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
意味します。
コマンドを実行し、出力およびエラーメッセージを削除します。コマンドが成功すると、SUCCESS が返されます。コマンドが失敗すると、SUCCESS が返されます。
注:このコマンドは非解釈postrotate
と解釈されるため、bash拡張機能は機能しません。/bin/sh
/bin/bash