如何為 nix 上的 systemd 單元檔案指定執行檔的路徑?

如何為 nix 上的 systemd 單元檔案指定執行檔的路徑?

我正在嘗試編寫一個 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 ~查看您的主目錄。

相關內容