Systemd ExecStop é executado imediatamente após o ExecStart

1

Eu tenho o seguinte arquivo em /etc/systemd/system/mytest.service

[Unit]
Description=My Test Service
After=network.target

[Service]
Type=forking
User=mytestuser
Group=mytestuser
WorkingDirectory=/opt/mytest

ExecStart=/bin/echo "My Test Start!"

ExecStop=/bin/echo "My Test Stop!"

ExecReload=/bin/echo "My Test Restart!"

[Install]
WantedBy=multi-user.target

Depois de executar systemctl daemon-reload e systemctl start mytest , a seguinte saída pode ser vista em journalctl -xe

Jun 29 09:44:57 localhost.localdomain systemd[1]: Starting My Test Service...
-- Subject: Unit mytest.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mytest.service has begun starting up.
Jun 29 09:44:57 localhost.localdomain echo[4370]: My Test Start!
Jun 29 09:44:57 localhost.localdomain echo[4372]: My Test Stop!
Jun 29 09:44:57 localhost.localdomain polkitd[619]: Unregistered Authentication Agent for unix-process:4364:694445 (system bus name :1.149, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_GB.UTF-8) (disconnected from
Jun 29 09:44:57 localhost.localdomain systemd[1]: Started My Test Service.
-- Subject: Unit mytest.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mytest.service has finished starting up.
--
-- The start-up result is done.

Isso mostra o comando ExecStart em execução, imediatamente seguido pelo ExecStop, por que isso está acontecendo? Há algo faltando no meu arquivo .service?

Obrigado

    
por Jem Tucker 29.06.2017 / 10:51

1 resposta

0

O problema é que echo não é forking - nenhum processo filho é deixado para trás. O que você precisa é de um oneshot service, com RemainAfterExit=true . Se você apenas alterá-lo para oneshot , obterá exatamente o mesmo comportamento. A parte RemainAfterExit informa que mesmo após o ExecStart sair, o serviço ainda deve ser considerado em execução, portanto, ele não deve executar ExecStop (s).

    
por 22.01.2018 / 15:58