Forçar o sistema a verificar o status do serviço após n segundos

2

Eu tenho um serviço systemd (para heka) que me causa algumas dores de cabeça.

O problema é que o "start" retorna com sucesso, mesmo se o daemon heka morrer logo após o início. Isso está acontecendo se os arquivos de configuração estiverem errados, por exemplo: o processo será iniciado, ele verificará a configuração e morrerá se não estiver satisfeito com o que encontrar. O Systemd retorna com sucesso neste caso.

Existe alguma maneira de forçar o systemd a verificar o status do programa após a inicialização? Talvez dormir n segundos após o início do processo?

Este é o script:

    [Unit]
    Description=Heka event/metric/log collection and routing daemon
    After=network.target auditd.service
    ConditionPathExists=!/etc/heka/hekad_not_to_be_run

    [Service]
    EnvironmentFile=-/etc/default/heka
    Type=simple
    PIDFile=/var/run/hekad.pid
    ExecStart=/usr/bin/hekad -config=/etc/heka
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=on-failure
    StandardError=inherit

    [Install]
    WantedBy=multi-user.target
    Alias=heka.service
    
por cristi 15.02.2016 / 12:48

3 respostas

5

Você pode encadear vários comandos ExecPostStart juntos. E você pode executá-los mesmo se o ExecStart principal falhar, adicionando um - / ( systemd.service: Type = ). Algo parecido com isto:

ExecStart=-/usr/bin/hekad -config=/etc/heka
ExecStartPost=/bin/sleep 3
ExecStartPost=/bin/kill -0 $MAINPID &>/dev/null

Isso garante que você ainda tenha o MAINPID para usar ao parar ou reiniciar o serviço, por exemplo.

    
por 15.02.2016 / 14:56
0

Se houver uma maneira fácil de verificar se hekad ainda está ativo, inicie o daemon usando ExecStartPre=/usr/bin/hekad -config=/etc/heka e com ExecStart executando um script pequeno que tenha um loop que primeiro durma X segundos e, em seguida, verifique se o daemon hekad ainda está em execução. Quebrando o loop somente se o hekad parece ter parado.

    
por 15.02.2016 / 13:30
0

Você deve usar ExecStartPost para iniciar um comando ou script que aguenta e, em seguida, executa uma verificação. Se isso sair de zero, a unidade é considerada uma falha.

Veja: link

    
por 15.02.2016 / 14:20

Tags