
我正在嘗試記錄初始化腳本的早期啟動輸出。這是正在起作用的:
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腳本(shell是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
解決了。結果我需要重設switch_root
在 stage-1-init.sh 中呼叫之前使用的 stdout 和 stderr 檔案描述符。