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
一般來說,
${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 ~
查看您的主目錄。