Estou tentando converter um antigo script de inicialização em um arquivo de unidade do systemd.
Meu script de init origina um arquivo de configuração e, dependendo de algumas variáveis, alguns argumentos são adicionados ao daemon.
O script de inicialização faz algo semelhante a isto:
## My daemon
DAEMON="/usr/bin/my_daemon"
## These arguments are fixed:
DAEMON_ARGS="-a -b -c"
# Called on 'service my_service start'
do_start() {
## Source config file
. /etc/me/config_file
## If FOO is defined, add -x $FOO to arguments
if [ -n "$FOO" ]; then
DAEMON_ARGS="$DAEMON_ARGS -x $FOO"
fi
## Start the daemon
start-stop-daemon --start --quiet --exec $DAEMON -- $DAEMON_ARGS
}
Como posso conseguir o mesmo efeito com um arquivo de unidade?
Editar 1:
Aqui está um arquivo de esqueleto:
[Unit] Description=My service Wants=local-fs.target Requires=local-fs.target [Service] PIDfile=/var/run/daemon.pid Type=forking ExecStart=/usr/bin/my_daemon -a -b -c [Install] RequiredBy=basic.target WantedBy=basic.target
Eu quero passar o argumento -x $FOO
para o daemon em ExecStart
, mas SOMENTE se $FOO
for definido em algum arquivo de configuração (digamos, / etc / me / config_file).
Eu sei que posso ler um EnvironmentFile
, então eu posso fazer:
[Service] EnvironmentFile=/etc/me/config_file ExecStart=/usr/bin/my_daemon -a -b -c -x $FOO
Mas FOO
pode não estar definido, portanto, o argumento -x
não terá valor ... e ocorrerá um erro.
$FOO
é uma opção que é lida por outros serviços, portanto, não é viável fazer FOO=-x <value>
.
Tags systemd