Wie drucke ich aus einem Systemd-Umgebungsgenerator in das Journal?

Wie drucke ich aus einem Systemd-Umgebungsgenerator in das Journal?

Ich arbeite an einem eingebetteten System. Ich habe einen Umgebungsgenerator in Bash geschrieben und er scheint einwandfrei zu funktionieren. Allerdings erhalte ich einige Fehler im Journal:

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.         

Mir fällt auf, dass sowohl stdout als auch stderr unterdrückt zu sein scheinen. Loggerfunktioniert nicht, vielleicht weilsystemd-journald.servicehat noch nicht begonnen? Oder vielleicht weilLoggerausbeschäftigtboxund es ist nicht kompatibel? Mir ist aufgefallen, dass diepoky/yoctoStandardmäßig werden geschrieben inrsyslogausLogger, nicht das systemd-Journal.

Wenn ich systemd.log_level=debug als Kernel-Boot-Argument aktiviere, verschwinden meine Fehler (beunruhigend). Meine Fehler verursachen meines Wissens nach keinen Schaden, aber ich würde sie gerne bereinigen. Einstellungsystemd.log_level=debugbewirkt, dass andere Generatoren im Journal vermerkt werden:

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

Wie funktioniert alsosystemd-rc-lokaler-generatorErstellen Sie die Nachricht

/etc/rc.local existiert nicht, überspringen

im Journal? Muss ich meinen Umgebungsgenerator in C schreiben, um Nachrichten drucken zu können (bei Bedarf bin ich dazu bereit)? Kann ich Nachrichten abrufen, ohnesystemd.log_level=debug?

Antwort1

Sie können sich nicht in das Journal einloggen, da das Journal zu diesem Zeitpunkt noch nicht läuft. Tatsächlich besteht der ganze Vorteil bei systemd-Generatoren, die neue Unit-Dateien erzeugen können, darin, dass sie vorbuchstäblich jedeDie systemd-Einheit wurde gestartet.

Sie können sich jedoch anmelden beiKernel-Log-Puffer(d. h. der dmesgPuffer) und Ihre Nachrichten werden von Journald zusammen mit allen anderen Kernel-Nachrichten importiert.

Schreiben Sie dazu Ihre Nachricht an /dev/kmsg, optional mit dem Schweregradpräfix im Kernel-Stil:

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

Der Schweregrad kann mit <n>dem Präfix " " angegeben werden, dasselbe gilt auch für Syslog. (Beispielsweise ist 3 LOG_ERR, 4 ist LOG_WARN, 7 ist LOG_DEBUG.) Und ja, Sie müssen das Syslog-artige Label "process[pid]:" selbst hinzufügen.

verwandte Informationen