我正在尝试记录初始化脚本的早期启动输出。这是正在起作用的:
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 文件描述符。