Por comentário de jasonwryan, enquanto o padrão Type=simple
funciona para muitos arquivos de serviço do Systemd, ele não funciona quando o script em ExecStart
inicia outro processo e é concluído, como é o caso do carbon-cache.py do grafite. Nesses casos, você precisa especificar explicitamente Type=forking
na seção [Service]
para que o Systemd saiba examinar o processo gerado em vez do inicial.
Como explicado em man systemd.service
:
If set to forking, it is expected that the process configured with ExecStart= will call fork() as part of its start-up. The parent process is expected to exit when start-up is complete and all communication channels are set up. The child continues to run as the main daemon process. This is the behavior of traditional UNIX daemons. If this setting is used, it is recommended to also use the PIDFile= option, so that systemd can identify the main process of the daemon. systemd will proceed with starting follow-up units as soon as the parent process exits.
Resposta específica ao grafite
Embora o problema acima tenha resolvido o meu Systemd, rapidamente me deparei com problemas específicos de grafite (com o Twisted) e acabei retornando ao padrão Type
.
Grafite < 0,9.12
Nas versões anteriores do Graphite, só é possível evitar o bifurcação usando a opção --debug
:
[Service]
ExecStart=/opt/graphite/bin/carbon-cache.py --debug start
Grafite > = 0.9.13
Em esta solicitação pull , uma opção --no-daemon
foi mesclada:
[Service]
ExecStart=/opt/graphite/bin/carbon-cache.py --no-daemon start