
我正在嘗試編寫一個 systemd 單元檔案。
如何指定可執行檔的路徑?我如何確定使用什麼?
在這個具體情況下,我嘗試使用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 ~
查看您的主目錄。