
시스템 단위 파일을 작성하려고 합니다.
실행 파일의 경로를 어떻게 지정합니까? 무엇을 사용할지 어떻게 결정할 수 있나요?
이 특별한 경우에 나는 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
mkdir에 대한 경로를 찾는 데 사용할 수 있을 것 같습니다 which
. 하지만 다른 사람의 nix 구성에서 a가 표시됩니다 ${pkgs.nameOfPackage}
. 따라서 대신 이것을 사용해야 할까요?
which mkdir
/run/current-system/sw/bin/mkdir
답변1
일반적으로 말하면 ${pkgs.nameOfPackage}
가 선호되는 구문입니다.
특정 예에서 m mkdir
은 coreutils 패키지의 일부입니다. (말장난 의도) 명령으로 결정할 수 있습니다 readlink $(which mkdir)
. 따라서 귀하의 라인은 다음과 같아야 합니다:
ExecStartPre=${pkgs.coreutils}/bin/mkdir BLAH BLAH BLAH
coreutils는 항상 AFIK로 설치되지만 구문의 좋은 이점 ${pkgs.nameOfPackage}
은 패키지를 설치할 필요가 없다는 것입니다 nameOfPackage
. Nix가 당신을 위해 그것을 가져올 것입니다.
답변2
먼저 공백과 큰따옴표가 필요하지 않습니다.
ExecStartPre=/run/current-system/sw/bin/mkdir -p %h/.config/example/pending
둘째, 기록된 대로 시스템에서 명령을 시도해 보셨습니까? 셸에서:
mkdir -p ~/.config/example/pending
마지막으로 %h는 사용자의 집을 나타냅니다. 그러나 mkdir 명령이 올바른 위치에 있지 않기 때문에 시스템이 다른 위치를 대상으로 하고 있을 수 있습니다. echo ~
홈 디렉토리를 보려면.