
init スクリプトからの初期ブート出力をログに記録しようとしています。これは機能しているものです:
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
上記のスニペットは、initrd 内の初期ブート init スクリプト (シェルは busybox ash) に配置され、出力は/run/log/stage-1-init.log
ファイルに記録され、後でブートされたシステム内で表示でき、内部にコンテンツがあります。
sed
ただし、空の行を除外するフィルターも追加しようとしています。
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
一番下のスクリプトに変更した瞬間、何も出力されません/run/log/stage-1-init.log
。ファイルは完全に空ですが、ファイルは作成されています。
起動したシステムに busybox をローカルにインストールして、ASH および busybox バージョンの tee と sed をテストし、下位バージョンを実行したところ、正常に動作しました。しかし、何らかの理由で、起動中に下位バージョンを実行すると、ログ ファイルが空になります。
何が間違っているのでしょうか? リダイレクトと関係があるように思えます。
答え1
解決しました。stage-1-init.sh を呼び出す前に使用した stdout および stderr ファイル記述子をリセットする必要があることが判明しましたswitch_root
。