![Como imprimo no diário a partir de um gerador de ambiente systemd?](https://rvso.com/image/191778/Como%20imprimo%20no%20di%C3%A1rio%20a%20partir%20de%20um%20gerador%20de%20ambiente%20systemd%3F.png)
Estou trabalhando em um sistema embarcado. Eu escrevi um gerador de ambiente no bash e parece funcionar bem. No entanto, recebo alguns erros no diário:
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.
Percebo que tanto stdout quanto stderr parecem estar suprimidos. registradornão funciona, talvez porquesystemd-journald.serviceainda não começou? Ou talvez porqueregistradoré decaixa ocupadae não é compatível? Notei que opoky/yoctoos padrões estão escrevendo pararsyslogderegistrador, não o diário do systemd.
Se eu ativar systemd.log_level=debug como argumento de inicialização do kernel, meus erros desaparecerão (desconcertante). Meus erros não estão prejudicando nada, pelo que posso dizer, mas gostaria de limpar isso. Contextosystemd.log_level=depurarfaz com que outros geradores sejam anotados no diário:
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...
Então como é quesystemd-rc-gerador localcriar a mensagem
/etc/rc.local não existe, pulando
no diário? Preciso escrever meu gerador de ambiente em C para poder imprimir mensagens (estou disposto, se necessário)? Posso receber mensagens sem configurarsystemd.log_level=depurar?
Responder1
Você não pode fazer logon no diário, porque o diário ainda não está em execução neste momento. Na verdade, o que importa sobre os geradores do systemd serem capazes de produzir novos arquivos de unidade é que eles são executados antesliteralmente qualquerA unidade systemd foi iniciada.
Você pode, no entanto, fazer logon nobuffer de log do kernel(ou seja, o dmesg
buffer), e suas mensagens serão importadas pelo journald junto com todas as outras mensagens do kernel.
Para fazer isso, escreva sua mensagem em /dev/kmsg
, opcionalmente com o prefixo de gravidade no estilo do 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
A gravidade pode ser especificada usando <n>
prefixos " ", também iguais ao syslog. (Por exemplo, 3 é LOG_ERR, 4 é LOG_WARN, 7 é LOG_DEBUG.) E sim, você mesmo precisa adicionar o rótulo "process[pid]:" no estilo syslog.