systemd: finaliza a execução do script de shell customizado antes de iniciar o nginx

0

Usando o Debian 9 stable, quero iniciar um script de shell personalizado antes de iniciar os processos NGINX e o firewall do tipo shorewall:

  • Faça algum trabalho de inicialização
  • Monte um diretório (overlayfs) para sobrepor o /etc com a configuração do NGINX, configuração do shorewall e /etc/hosts
  • O script também termina com sync , não tenho certeza se é uma boa ideia

systemctl list-dependencies
default.target
● ├─display-manager.service
● ├─systemd-update-utmp-runlevel.service
● └─multi-user.target
● ├─console-setup.service
● ├─cron.service
● ├─dbus.service
● ├─dropbear.service
● ├─myservice.service   <-- My service (link created with systemctl enable)
● ├─networking.service
● ├─nginx.service       <-- To be executed after myservice
[...]
● ├─basic.target
● │ ├─-.mount
● │ ├─myservice.service <-- My service (link created with systemctl enable)
● │ ├─shorewall.service  <-- To be executed after myservice

myservice.service TENTATIVA 1

[Unit]
Description=My startup service
Requires=shorewall.service nginx.service
Before=shorewall.service nginx.service

[Service]
RemainAfterExit=yes
ExecStart=/usr/local/bin/myservice start
ExecStop=/usr/local/bin/myservice stop

[Install]
WantedBy=multi-user.target
WantedBy=basic.target

Os registros:

journalctl [...]
Oct 12 11:31:43 server-dev nginx[448]: nginx: [emerg] host not found in upstream "server-dev.com" in /etc/nginx/sites-enabled/default:33
Oct 12 11:31:43 server-dev nginx[448]: nginx: configuration file /etc/nginx/nginx.conf test failed <== NGINX: BAD
Oct 12 11:31:43 server-dev systemd[1]: nginx.service: Control process exited, code=exited status=1
Oct 12 11:31:43 server-dev systemd[1]: Failed to start A high performance web server and a reverse proxy server.
Oct 12 11:31:43 server-dev systemd[1]: nginx.service: Unit entered failed state.
Oct 12 11:31:43 server-dev systemd[1]: nginx.service: Failed with result 'exit-code'.
Oct 12 11:31:43 server-dev systemd[1]: Reached target Multi-User System.
Oct 12 11:31:43 server-dev systemd[1]: Reached target Graphical Interface.
Oct 12 11:31:43 server-dev systemd[1]: Starting Update UTMP about System Runlevel Changes...
Oct 12 11:31:43 server-dev systemd[1]: Started Update UTMP about System Runlevel Changes.
Oct 12 11:31:43 server-dev server[423]: DO: server start DONE <== END OF SCRIPT myservice
Oct 12 11:31:43 server-dev shorewall[449]: Compiling using Shorewall 5.0.15.6... <== SHOREWALL: GOOD
Oct 12 11:31:44 server-dev shorewall[449]: Processing /etc/shorewall/shorewall.conf...
Oct 12 11:31:44 server-dev shorewall[449]: Loading Modules...

O Shorewall é sistematicamente iniciado corretamente, após a execução do myservice. Nginx é na maioria das vezes iniciado durante a execução do myservice, antes que /etc seja sobreposto corretamente (sobreposto?), e, portanto, falha ao inicializar corretamente.

myservice.service TENTATIVA 2

Eu também tentei mudar o

[Install]
WantedBy=default.target

E mude

[Unit]
Before=multi-user.target

Também não funciona.

Como posso garantir que nginx e shorewall começam após a execução do myservice?

    
por Robert 11.10.2017 / 18:26

1 resposta

1

Se você não especificar o tipo do seu serviço systemd, o padrão será Type=simple . Isso significa que o serviço é considerado iniciado no momento em que seu comando ExecStart é iniciado . Você provavelmente deseja usar Type=oneshot , que aguarda o comando ExecStart sair antes de considerar o serviço iniciado. Veja man systemd.service para mais detalhes.

    
por 12.10.2017 / 07:37