O Systemd não torna o diretório de trabalho acessível através dos especificadores , nem você pode usar variáveis de ambiente ao definir WorkingDirectory
. Você pode usar variáveis de ambiente em ExecStart
, mas não para o caminho de comando . Então, a menos que você use soluções alternativas, você terá que especificar o caminho pelo menos três vezes (note que você quer Environment=
, não EnvironmentFile=
):
Environment='WORKDIR=/home/aaaa/bbbbb'
WorkingDirectory=/home/aaaa/bbbbb
ExecStart=/home/aaaa/bbbbb/server --database:${WORKDIR}/cfg.json
Ou coloque seu comando em sh
:
Environment='WORKDIR=/home/aaaa/bbbbb'
ExecStart=/bin/sh -c 'cd ${WORKDIR}; exec ${WORKDIR}/server --database:${WORKDIR}/cfg.json'
(esperamos que o seu WORKDIR
não inclua espaços ou outros caracteres especiais.)
Ou, se você fizer da unidade um modelo, poderá fazer:
Environment='WORKDIR=/%I'
WorkingDirectory=/%I
ExecStart=/%I/server --database:/%I/cfg.json
E faça algo como:
systemctl --user start my-service@home/aaaa/bbbbb.service
Observe a barra inicial /
antes do %I
. O caminho para o executável deve ser absoluto, com ou sem especificadores, portanto, precisamos usar /%I
.