systemd 's syntax para passar um parâmetro

-1

Como posso obter o caminho atual como o parâmetro? E como posso passar esse parâmetro para o ExecStart?

[Unit]
Description="xxxxxxx"

[Service]
EnvironmentFile='WORKDIR=/home/aaaa/bbbbb/' #I want to get this path dynamically when I put this in another path.
WorkingDirectory=/home/aaaa/bbbbb
ExecStart=/home/aaaa/bbbbb/server --database:/home/aaaa/bbbbb/cfg.json
ExecStop=/bin/sleep 5
KillMode=process
KillSignal=SIGQUIT
Restart=always
RestartSec=5s
LimitFSIZE=infinity
LimitCPU=infinity
LimitAS=infinity
LimitNOFILE=64000
LimitNPROC=64000
TasksMax=infinity
TasksAccounting=false

[Install]
WantedBy=multi-user.target
    
por Jimmy 11.06.2018 / 09:52

1 resposta

1

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 .

    
por muru 11.06.2018 / 12:01