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
一般的に、_${pkgs.nameOfPackage}
_が推奨される構文です。
特定の例では、mkdir
はcoreutilsパッケージの一部です。コマンドreadlink $(which mkdir)
でどの(しゃれを意図した)かを判別できます。したがって、あなたの行は次のようになります。
_ExecStartPre=${pkgs.coreutils}/bin/mkdir BLAH BLAH BLAH
_
Coreutilsは常にAFIKにインストールされますが、_${pkgs.nameOfPackage}
_構文の優れた利点は、パッケージnameOfPackage
をインストールする必要がないことです。 Nixがあなたに代わってそれを引き込みます。
まず、これらのスペースと二重引用符は必要ありません。
ExecStartPre=/run/current-system/sw/bin/mkdir -p %h/.config/example/pending
次に、書かれているとおりにシステムでコマンドを試しましたか?あなたのシェルで:
mkdir -p ~/.config/example/pending
最後に、%hはユーザーの自宅を指します。ただし、mkdirコマンドが適切な場所にないため、システムが別の場所をターゲットにしている可能性があります。 echo ~
ホームディレクトリを表示します。