¿Cómo imprimo en el diario desde un generador de entorno systemd?

¿Cómo imprimo en el diario desde un generador de entorno systemd?

Estoy trabajando en un sistema integrado. Escribí un generador de entorno en bash y parece funcionar bien. Sin embargo, recibo algunos errores en el diario:

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.         

Noto que tanto stdout como stderr parecen estar suprimidos. registradorno funciona, tal vez porquesystemd-journald.servicio¿aún no ha empezado? O tal vez porqueregistradores desdecaja ocupaday no es compatible? Noté que elpoky/yoctolos valores predeterminados son escribir arsyslogderegistrador, no el diario systemd.

Si activo systemd.log_level=debug como argumento de arranque del kernel, mis errores desaparecen (desconcertante). Mis errores no están dañando nada hasta donde yo sé, pero me gustaría limpiarlo. Configuraciónsystemd.log_level=depurarhace que otros generadores se anoten en el diario:

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...                                               

Entonces, ¿cómogenerador-local-systemd-rccrear el mensaje

/etc/rc.local no existe, omitiendo

en el diario? ¿Tengo que escribir mi generador de entorno en C para poder imprimir mensajes (estoy dispuesto si es necesario)? ¿Puedo recibir mensajes sin configurar?systemd.log_level=depurar?

Respuesta1

No puede iniciar sesión en el diario porque el diario aún no se está ejecutando en este momento. De hecho, lo importante de que los generadores systemd puedan producir nuevos archivos unitarios es que se ejecutan antesliteralmente cualquieraLa unidad systemd se ha iniciado.

Sin embargo, puede iniciar sesión en elbuffer de registro del kernel(es decir, el dmesgbúfer), y sus mensajes serán importados por diario junto con todos los demás mensajes del núcleo.

Para hacer esto, escriba su mensaje en /dev/kmsg, opcionalmente con el prefijo de gravedad estilo kernel:

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

La gravedad se puede especificar utilizando <n>los prefijos " ", también lo mismo que syslog. (Por ejemplo, 3 es LOG_ERR, 4 es LOG_WARN, 7 es LOG_DEBUG). Y sí, debe agregar usted mismo la etiqueta "proceso[pid]:" de estilo syslog.

información relacionada