![systemd 環境ジェネレーターからジャーナルに印刷するにはどうすればよいですか?](https://rvso.com/image/191778/systemd%20%E7%92%B0%E5%A2%83%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%AC%E3%83%BC%E3%82%BF%E3%83%BC%E3%81%8B%E3%82%89%E3%82%B8%E3%83%A3%E3%83%BC%E3%83%8A%E3%83%AB%E3%81%AB%E5%8D%B0%E5%88%B7%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
私は組み込みシステムに取り組んでいます。bash で環境ジェネレーターを作成しましたが、問題なく動作しているようです。ただし、ジャーナルにいくつかのエラーが表示されます。
May 28 02:03:14 imx6ull14x14evk systemd[121]: /etc/systemd/system-environment-generators/overlayroot-ubifs.sh failed with exit status 32.
May 28 02:03:14 imx6ull14x14evk systemd[121]: Invalid variable assignment "overlay /mnt/user/overlay overlay rw,noatime,lowerdir=...", ignoring.
May 28 02:03:14 imx6ull14x14evk systemd[121]: Invalid variable assignment "overlay / overlay rw,relatime,lowerdir=...", ignoring.
May 28 02:03:14 imx6ull14x14evk systemd[121]: Invalid variable assignment "devtmpfs /orig/dev devtmpfs rw,relatime,size=...", ignoring.
May 28 02:03:14 imx6ull14x14evk systemd[121]: Invalid variable assignment "tmpfs /orig/run tmpfs rw,nosuid,nodev,mode=...", ignoring.
stdout と stderr の両方が抑制されているようです。 ロガーうまくいかないのは、おそらくsystemd-journald.サービスまだ始まっていないのか?それともロガーからビジーボックス互換性がないのでしょうか?ポッキー/ヨクトデフォルトは書き込み中ログからロガーsystemd ジャーナルではありません。
カーネルの起動引数としてsystemd.log_level=debugをオンにすると、エラーが消えます(困惑します)。私の知る限り、エラーは何も害を及ぼしていませんが、クリーンアップしたいと思っています。設定systemd.log_level=デバッグ他のジェネレータがジャーナルに記録されるようになります:
May 28 02:14:43 imx6ull14x14evk kernel: UBIFS (ubi0:1): FS size: 424099840 bytes (404 MiB, 1670 LEBs), journal size 21331968 bytes (20 MiB, 84 LEBs) mber 2 using ci_hdrck_data_crc mtdparts=gpmi-nand:4m(nandboot),-(nandubi)
3 imx6ull14x14evk kernel: UBIFS (ubi0:1): reserved for root: 4952683 bytes (4836 KiB)
May 28 02:14:43 imx6ull14x14evk kernel: UBIFS (ubi0:1): media format: w5/r0 (latest is w5/r0), UUID 29F89BD4-13AA-4118-B7B7-2B15D8F97EDB, small LPT model
May 28 02:14:43 imx6ull14x14evk systemd-rc-local-generator[196]: /etc/rc.local does not exist, skipping.
May 28 02:14:43 imx6ull14x14evk systemd-hibernate-resume-generator[195]: Not running in an initrd, quitting.
May 28 02:14:43 imx6ull14x14evk systemd-getty-generator[193]: Automatically adding serial getty for /dev/ttymxc0.
May 28 02:14:43 imx6ull14x14evk systemd-gpt-auto-generator[194]: Neither root nor /usr file system are on a (single) block device. vice= 3.18
le entries: 513 imx6ull14x14evk systemd-fstab-generator[192]: Parsing /etc/fstab...
それで、systemd-rc-ローカルジェネレータメッセージを作成する
/etc/rc.localが存在しないため、スキップします
ジャーナルに?メッセージを印刷するために環境ジェネレータをCで書く必要がありますか(必要なら喜んで)?設定せずにメッセージを取得できますか?systemd.log_level=デバッグ?
答え1
この時点ではまだジャーナルが動作していないため、ジャーナルにログを記録することはできません。実際、systemdジェネレータが新しいユニットファイルを生成できるのは、それらが実行される前に実行されるからです。文字通りどんなsystemd ユニットが起動しました。
ただし、カーネルログバッファ(つまり、dmesg
バッファ)、メッセージは他のすべてのカーネル メッセージとともに journald によってインポートされます。
/dev/kmsg
これを行うには、オプションでカーネル スタイルの重大度プレフィックスを付けて、にメッセージを書き込みます。
echo "foobar-generator[$$]: Something's going on" > /dev/kmsg
echo "<4>foobar-generator[$$]: Warning, an error is about to occur" > /dev/kmsg
echo "<3>foobar-generator[$$]: An error just occured" > /dev/kmsg
重大度は、syslog と同じように " " プレフィックスを使用して指定できます<n>
。(たとえば、3 は LOG_ERR、4 は LOG_WARN、7 は LOG_DEBUG です。) また、syslog スタイルの "process[pid]:" ラベルを自分で追加する必要があります。