
Ich versuche, die frühen Boot-Ausgaben des Init-Skripts zu protokollieren. Folgendes funktioniert:
mkdir -p /run/log && \
mkdir -p /tmp && \
mkfifo /tmp/stage-1-init.log.fifo1 && \
mkfifo /tmp/stage-1-init.log.fifo2
tee -i < /tmp/stage-1-init.log.fifo1 /run/log/stage-1-init.log &
exec > /tmp/stage-1-init.log.fifo1 2>&1
Der obige Codeausschnitt wird in das frühe Boot-Init-Skript (Shell ist Busybox Ash) innerhalb von initrd eingefügt und die Ausgabe wird in einer /run/log/stage-1-init.log
Datei protokolliert, sodass ich sie später im gebooteten System ansehen kann und sie Inhalt enthält.
Ich versuche jedoch auch, einen sed
Filter hinzuzufügen, um leere Zeilen herauszufiltern:
mkdir -p /run/log && \
mkdir -p /tmp && \
mkfifo /tmp/stage-1-init.log.fifo1 && \
mkfifo /tmp/stage-1-init.log.fifo2
tee -i < /tmp/stage-1-init.log.fifo1 /tmp/stage-1-init.log.fifo2 &
sed '/^$/d' < /tmp/stage-1-init.log.fifo2 > /run/log/stage-1-init.log &
exec > /tmp/stage-1-init.log.fifo1 2>&1
Sobald ich zum untersten Skript wechsle, erfolgt überhaupt keine Ausgabe /run/log/stage-1-init.log
. Die Datei ist komplett leer, aber die Datei wird erstellt.
Ich habe busybox lokal auf dem gebooteten System installiert, um die ASH- und Busybox-Versionen von tee und sed zu testen. Ich habe die unterste Variante ausgeführt und es hat funktioniert. Aber aus irgendeinem Grund führt die unterste Variante beim Booten zu einer leeren Protokolldatei.
Was könnte schief laufen? Es fühlt sich an, als hätte es etwas mit der Umleitung zu tun?
Antwort1
Gelöst. Es stellte sich heraus, dass ich die stdout- und stderr-Dateideskriptoren zurücksetzen musste, die ich vor dem Aufruf switch_root
von stage-1-init.sh verwendet hatte.