我正在尝试编写一个 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 ~
查看您的主目录。