ディスク操作を使用するコマンドからSTDOUT + STDERRを正常にリダイレクトできません。常に動作する標準リダイレクトは次のとおりです。何とかこれで出力をキャプチャします。 2つの実際の例:
例1:
# wipefs --all --force /dev/sda >>/var/log/custom.log 2>&1
[ 20.169018 ] sda: sda1
例2:
# mount --verbose --options defaults --types ext4 /dev/sda1 /path/is/here >>/var/log/custom.log 2>&1
[ 30.947410 ] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
興味深いことに、これはディスクが何らかの方法で接触したときにのみ発生します。スクリプトの他のすべてのリダイレクトは期待どおりに機能します。
どんなアイデアがありますか?
答え1
これはコマンドの出力ではなく、カーネルログメッセージです。メッセージはコマンドから出ていないため、リダイレクトの影響を受けません。
カーネルログメッセージは通常ログファイルに入り、重要なメッセージはコンソールに追加で表示されます。 「重要」と「コンソール」の正確な意味は、ロギング構成によって異なります。 sysklogdを使用している場合、構成ファイルは/etc/syslog.conf
rsyslogを使用している場合です。 systemdの組み込みロギングを使用している場合、カーネルは設定可能なロギングデーモンを介さずにコンソールに直接ログを印刷することもできます(ただし、これは通常ロギングデーモンの設定を通じて間接的に実行されます)。/etc/rsyslog.conf
/etc/rsyslog.d/*
/etc/systemd/journal.conf
dmesg --console-…