
Estou tentando escrever um arquivo de unidade do systemd.
Como especifico o caminho para um executável? Como posso determinar o que usar?
Neste caso específico estou tentando usar o mkdir
.
ExecStartPre = "/bin/mkdir -p %h/.config/example/pending/";
Isso resulta em um erro ao iniciar o arquivo da unidade:
Jan 16 08:46:11 nixos systemd[19577]: example.service: Failed at step EXEC spawning /bin/mkdir: No such file or directory
Suponho que poderia apenas usar which
para encontrar o caminho para mkdir - mas estou vendo uma ${pkgs.nameOfPackage}
configuração de outro nix - então possivelmente eu deveria usar isso?
which mkdir
/run/current-system/sw/bin/mkdir
Responder1
De modo geral, ${pkgs.nameOfPackage}
é a sintaxe preferida.
Para o seu exemplo específico, mkdir
faz parte do pacote coreutils; qual (trocadilho intencional) você pode determinar com o comando readlink $(which mkdir)
. Portanto, sua linha deve ser:
ExecStartPre=${pkgs.coreutils}/bin/mkdir BLAH BLAH BLAH
Embora o coreutils esteja sempre instalado no AFIK, um bom benefício da ${pkgs.nameOfPackage}
sintaxe é que você não precisa instalar o pacote nameOfPackage
; Nix vai puxar isso para você.
Responder2
Primeiro você não precisa desses espaços e aspas duplas.
ExecStartPre=/run/current-system/sw/bin/mkdir -p %h/.config/example/pending
Em segundo lugar, você tentou o comando em seu sistema conforme está escrito? Na sua concha:
mkdir -p ~/.config/example/pending
Por último, %h refere-se à casa do usuário. Mas talvez o seu sistema esteja direcionado para outro local, já que o comando mkdir não está no lugar certo. echo ~
para ver seu diretório inicial.