Criando arquivos unitários no Ubuntu 16.04

3

Eu criei este arquivo de unidade em /lib/systemd/system/menu-core-prices-update.service :

[Unit]
Description = core-price-update daemon
After network.target = auditd.service

[Service]
Type = forking
ExecStart = /usr/local/bin/start-menu-core-prices-update.sh
ExecStop =  /usr/local/bin/stop-menu-core-prices-update.sh
ExecReload = /usr/local/bin/reload-stop-menu-core-prices-update.sh

[Install]
WantedBy = multi-user.target

Na linha de comando, posso executar:

$ /usr/local/bin/start-menu-core-prices-update.sh

e o programa é iniciado corretamente. Mas se eu iniciar o daemon:

$ sudo systemctl start menu-core-prices-update.service

Eu recebo este erro:

Jul 24 21:10:20 localhost systemd[13655]: menu-core-prices-update.service: Failed at step EXEC spawning /usr/local/bin/start-menu-core-prices-update.sh: Exec format error
-- Subject: Process /usr/local/bin/start-menu-core-prices-update.sh could not be executed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- The process /usr/local/bin/start-menu-core-prices-update.sh could not be executed and failed.
-- 
-- The error number returned by this process is 8.
Jul 24 21:10:20 localhost systemd[1]: menu-core-prices-update.service: Control process exited, code=exited status=203
Jul 24 21:10:20 localhost systemd[1]: Failed to start core-price-update daemon.
-- Subject: Unit menu-core-prices-update.service has failed

As permissões:

-rwxr-xr-x 1 root root 87 Jul 24 20:27 /usr/local/bin/start-menu-core-prices-update.sh
    
por en Peris 24.07.2018 / 23:13

1 resposta

4

Questão nº 1

Eu encontrei este tópico intitulado: [Resolvido] Adicionar script personalizado ao systemd que tem o mesmo erro como sua saída mostra acima, principalmente este bit:

Failed at step EXEC spawning /usr/local/bin/start-menu-core-prices-update.sh: Exec format error

Esse erro geralmente significa que seu script tem um ou mais desses problemas:

  • Não é executável
  • Está faltando a shebang ( #!/bin/bash )

Para resolver isso, certifique-se de que seu script seja executável:

$ chmod a+x /usr/local/bin/start-menu-core-prices-update.sh

E não se esqueça de adicionar um shebang, #!/bin/bash ao topo.

Questão nº 2

Parece que você tem um erro de digitação nesta linha:

After network.target = auditd.service

Isso provavelmente deve ser isso:

After=network.target auditd.service

Questão nº 3

Não está claro para mim por que você está usando o Type = forking . Quando você usa esse tipo, é necessário usar ExecStart= para usar um método que chame fork() . Você também deve estar usando a opção PIDFile= .

Eu esperaria que seu aplicativo Java funcionasse bem com simple ou oneshot . Veja este P & D Q & A intitulado: Bifurcação em um script systemd para mais sobre isso.

    
por 25.07.2018 / 04:09