systemd에서 파이프 /stdin/stdout 사용

systemd에서 파이프 /stdin/stdout 사용

일회성 스크립트를 실행하기 위해 "ExecStart" 지시문을 사용하는 시스템 서비스가 있습니다. 이 스크립트는 ZFS 암호화 키가 로드될 때 부팅 프로세스 초기(파일 시스템이 마운트되기 전)에 실행됩니다.

내가 수행하는 방식(디스크에 키를 저장하지 않고 TPM에서 키를 해독하는 방식)으로 인해 한 명령의 출력을 다른 명령으로 파이프해야 합니다. 실패의 원인을 파악하려고 노력 중인데 /dev/stdout에 써야 하는 명령을 실행할 때 "출력 파일을 열 수 없습니다" 오류가 발생하는 것을 볼 수 있습니다.

컴퓨터가 시작된 후 "systemd start <servicename>"을 사용하여 동일한 서비스를 실행하면 오류 없이 성공합니다. 그래서 나는 그것이 단위 의존성 문제라고 생각합니다. 어떤 유닛을 놓칠지 모르겠습니다.

(저는 암호화된 루트 파일 시스템을 사용하지 않으므로 이는 루트 파일 시스템 부팅 문제가 아닙니다.)

답변1

이는 tpm_unsealdata로 인한 오해의 소지가 있는 오류 메시지임이 밝혀졌습니다. 실제 문제는 tcsd가 로드되지 않는다는 것입니다. 원래 유닛 파일에 있음

Requires=trousers

단위 스크립트를 실행하기 전에 필수 구성 요소가 로드되지 않습니다.

After=trousers

또한 필요합니다.

(예, TPM1 tcsd 데몬은 "trousers"라는 패키지의 일부입니다.)

관련 정보