Systemd – o caminho não é absoluto – não pode ser executado

Systemd – o caminho não é absoluto – não pode ser executado

Estou usando Linux. Eu tenho acesso ao root do meu usuário.

root@marais:~# pwd
/root

Neste diretório eu tenho o seguinte:

root@marais:~# ls
example.log  log_watcher.service  log_watcher.sh

log_watcher.service

[Install]
WantedBy=multi-user.target

[Unit]
Description=Log Watcher Service

[Service]
ExecStart=log_watcher.sh

log_watcher.sh

# File to output to
ErrorLogFile="./error.log"
# File to read from
ExampleLogFile="./example.log"


if [ ! -e "$ErrorLogFile" ]; then   # check if file exists
    echo "Creating error file $ErrorLogFile"
    touch $ErrorLogFile
fi

echo "copying error messages from $ExampleLogFile to $ErrorLogFile"
# copy from one file to the other
 ### Challenge 1 ###
# grep ERROR $ExampleLogFile > $ErrorLogFile 
 ### Challenge 2 ###
# tail -f $ExampleLogFile | grep --line-buffered  ERROR | tee $ErrorLogFile 
while :; do grep ERROR $ExampleLogFile > $ErrorLogFile; sleep 2; done

echo "done"

Eu executo o seguinte:

systemctl enable log_watcher

Isso pareceu funcionar com sucesso, porque eu havia enviado uma mensagem sobre a configuração de links simbólicos.

Agora, quando tento iniciar o serviço:

systemctl start log_watcher

Nada parece acontecer, ou seja, o log_watcher.shnão é chamado.

Então, quando recebo o status:

systemctl status log_watcher

Diz que the log_watcher.shnão é chamado com um caminho absoluto.

root@marais:~# systemctl status log_watcher
● log_watcher.service - Log Watcher Service
   Loaded: error (Reason: Invalid argument)
   Active: failed (Result: exit-code) since Fri 2019-10-18 10:49:32 CEST; 9min ago
 Main PID: 2850 (code=exited, status=203/EXEC)

Oct 18 10:49:32 marais systemd[1]: Started Log Watcher Service.
Oct 18 10:49:32 marais systemd[1]: log_watcher.service: Main process exited, code=exited, status=203/EXEC
Oct 18 10:49:32 marais systemd[1]: log_watcher.service: Unit entered failed state.
Oct 18 10:49:32 marais systemd[1]: log_watcher.service: Failed with result 'exit-code'.
Oct 18 10:50:12 marais systemd[1]: [/root/log_watcher.service:8] Executable path is not absolute, ignoring: log_watcher.sh
Oct 18 10:50:12 marais systemd[1]: log_watcher.service: Service lacks both ExecStart= and ExecStop= setting. Refusing.
Warning: log_watcher.service changed on disk. Run 'systemctl daemon-reload' to reload units.

Quando corro:

root@marais:~# readlink -f log_watcher.sh
/root/log_watcher.sh

Isso mostra que meu caminho absoluto é /root/, e este é o caminho que defini em log_watcher.service:

ExecStart=/root/log_watcher.sh

Pergunta

Você pode informar como posso fazer com que este serviço inicie e execute o arquivo log_watcher.sh.

Obrigado

Responder1

No arquivo .service, precisei adicionar /bin/bashantes o caminho para o script.

Por exemplo, para backup.service:

ExecStart=/bin/bash /root/log_watcher.sh

informação relacionada