web-dev-qa-db-ja.com

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へのパスを見つけることができると思いますが、他のnixの構成に${pkgs.nameOfPackage}が表示されているので、代わりにこれを使用する必要がありますか?

which mkdir
/run/current-system/sw/bin/mkdir
3

一般的に、_${pkgs.nameOfPackage}_が推奨される構文です。

特定の例では、mkdirはcoreutilsパッケージの一部です。コマンドreadlink $(which mkdir)でどの(しゃれを意図した)かを判別できます。したがって、あなたの行は次のようになります。

_ExecStartPre=${pkgs.coreutils}/bin/mkdir BLAH BLAH BLAH
_

Coreutilsは常にAFIKにインストールされますが、_${pkgs.nameOfPackage}_構文の優れた利点は、パッケージnameOfPackageをインストールする必要がないことです。 Nixがあなたに代わってそれを引き込みます。

2
Emmanuel Rosa

まず、これらのスペースと二重引用符は必要ありません。

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

次に、書かれているとおりにシステムでコマンドを試しましたか?あなたのシェルで:

mkdir -p ~/.config/example/pending

最後に、%hはユーザーの自宅を指します。ただし、mkdirコマンドが適切な場所にないため、システムが別の場所をターゲットにしている可能性があります。 echo ~ホームディレクトリを表示します。

1
jayooin