nix에서 시스템 단위 파일의 실행 파일 경로를 지정하는 방법은 무엇입니까?

nix에서 시스템 단위 파일의 실행 파일 경로를 지정하는 방법은 무엇입니까?

시스템 단위 파일을 작성하려고 합니다.

실행 파일의 경로를 지정하는 방법은 무엇입니까? 무엇을 사용할지 어떻게 결정합니까?

이 특별한 경우에는 mkdir.

ExecStartPre = "/bin/mkdir -p %h/.config/example/pending/";

하지만 이로 인해 유닛 파일을 시작할 때 오류가 발생합니다.

Jan 16 08:46:11 nixos systemd[19577]: example.service: Failed at step EXEC spawning /bin/mkdir: No such file or directory

나는 이것을 사용하여 whichmkdir에 대한 경로를 찾을 수 있다고 생각했습니다. 하지만 ${pkgs.nameOfPackage}다른 사람의 nix 구성에서 하나를 보았습니다. 따라서 대신 이것을 사용해야 할까요?

which mkdir
/run/current-system/sw/bin/mkdir

답변1

일반적으로 말하면 ${pkgs.nameOfPackage}가 선호되는 구문입니다.

특정 예의 경우 mkdir이는 coreutils 패키지의 일부입니다. 명령을 사용하여 어떤 것(말장난 의도)을 결정할 수 있습니다 readlink $(which mkdir). 따라서 귀하의 라인은 다음과 같아야 합니다:

ExecStartPre=${pkgs.coreutils}/bin/mkdir BLAH BLAH BLAH

coreutils는 항상 AFIK로 설치되지만 이 구문의 한 가지 이점 ${pkgs.nameOfPackage}은 패키지를 설치할 필요가 없다는 것입니다 nameOfPackage.

답변2

첫째, 공백과 큰따옴표가 필요하지 않습니다.

ExecStartPre=/run/current-system/sw/bin/mkdir -p %h/.config/example/pending

둘째, 시스템에서 명령을 시도해 보셨나요? 셸에서:

mkdir -p ~/.config/example/pending

마지막으로 %h는 사용자의 집을 나타냅니다. 그러나 mkdir 명령이 올바른 위치에 있지 않기 때문에 시스템이 다른 위치를 대상으로 할 수도 있습니다. echo ~홈 디렉토리를 봅니다.

관련 정보