시스템 단위 파일을 작성하려고 합니다.
실행 파일의 경로를 지정하는 방법은 무엇입니까? 무엇을 사용할지 어떻게 결정합니까?
이 특별한 경우에는 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
나는 이것을 사용하여 which
mkdir에 대한 경로를 찾을 수 있다고 생각했습니다. 하지만 ${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 ~
홈 디렉토리를 봅니다.