Systemd

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

  • January 17, 2019

我正在嘗試編寫一個 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

一般來說,${pkgs.nameOfPackage}是首選的語法。

對於您的特定範例mkdir,它是 coreutils 包的一部分;您可以使用命令確定哪個(雙關語)readlink $(which mkdir)。所以你的行應該是:

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

雖然 coreutils 總是安裝 AFIK,但${pkgs.nameOfPackage}語法的一個很好的好處是您不需要安裝包nameOfPackage;尼克斯會為你拉進來的。

首先,您不需要那些空格和雙引號。

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

其次,您是否嘗試過系統上的命令?在你的外殼中:

mkdir -p ~/.config/example/pending

最後,%h 指的是使用者的家。但也許您的系統正在定位到另一個地方,因為 mkdir 命令不在正確的位置。echo ~查看您的主目錄。

引用自:https://unix.stackexchange.com/questions/494762