如何從 systemd 環境生成器列印到日誌中?

如何從 systemd 環境生成器列印到日誌中?

我正在開發嵌入式系統。我在 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.service還沒開始?或者也許是因為記錄器來自忙碌盒並且它不相容?我注意到狹隘/約克托預設值是寫入系統日誌記錄器,而不是 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緩衝區),並且您的訊息將與所有其他內核訊息一起由日誌匯入。

為此,請將訊息寫入/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

嚴重性可以使用「<n>」前綴指定,也與 syslog 相同。 (例如,3 是 LOG_ERR,4 是 LOG_WARN,7 是 LOG_DEBUG。)是的,您需要自行新增 syslog 樣式的「process[pid]:」標籤。

相關內容