如何从 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]:”标签。

相关内容