systemd forking vs simples?

6

Estou escrevendo meu primeiro arquivo systemd unit.

Para Type , existem algumas opções: forking , simple , etc. Eu li o Redhat Documentation sobre esse tópico (Tabela 9.9), mas ainda não tenho certeza quando devo usar essa opção.

Alguma diretriz?

    
por leeyuiwah 06.12.2017 / 19:58

1 resposta

12

Quando você inicia o serviço manualmente a partir da linha de comando (sem usar o comando nohup prefix ou o sufixo & para executá-lo em segundo plano), o que acontece?

a) Se o serviço iniciar e continuar em execução, o prompt não retornará até que você pressione Control-C ou pare o serviço de alguma outra forma: então Type = simple é a escolha certa.

b) Se o prompt retornar, mas o serviço continuar rodando em segundo plano (ou seja, o serviço se auto-sincronizar sozinho), então Type = forking é a escolha certa.

c) Se o serviço faz seu trabalho e retorna ao prompt sem deixar nada em execução (ou seja, o serviço apenas ajusta algumas configurações do kernel, envia um comando para outra coisa ou faz algo similar), então Type = oneshot é provavelmente o direito escolha. Neste caso, ExecStart do serviço pode ser o comando para "setar" algo, e ExecStop seria o comando correspondente para "desconfigurar". Este tipo geralmente se beneficia de RemainAfterExit=true , então o systemd irá acompanhar o "estado" deste serviço de acordo com o fato de a coisa ter sido "set" ou "unset" mais recentemente.

Os outros valores Type são casos especiais. Por exemplo, se o serviço utiliza uma conexão D-Bus, então Type = dbus pode ser a melhor escolha. Isso torna systemd ciente do fato e, em seguida, o systemd rastreará esse serviço (e qualquer coisa que dependa dele) pela presença desse serviço no D-Bus.

    
por 06.12.2017 / 20:39