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(셸은 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
하단 스크립트로 변경하면 출력이 전혀 없습니다. 파일이 완전히 비어 있지만 파일이 생성됩니다.
ASH 및 비지박스 버전의 tee와 sed를 테스트하기 위해 부팅된 시스템에 비지박스를 로컬로 설치했고 하단 변형을 실행했는데 작동했습니다. 그러나 어떤 이유로 하단 변형은 시작 중에 빈 로그 파일을 생성합니다.
무엇이 잘못될 수 있나요? 리디렉션과 관련이 있는 것 같은데요?
답변1
해결되었습니다. 알고 보니 switch_root
stage-1-init.sh를 호출하기 전에 사용하던 stdout 및 stderr 파일 설명자를 재설정해야 했습니다 .