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

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

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

O problema é que "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 irá iniciar, irá verificar a configuração e morrerá se não estiver satisfeito com o que encontrar. 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 roteiro:

    [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

Responder1

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

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 MAINPIDque usar ao parar ou reiniciar o serviço, por exemplo.

Responder2

Se houver uma maneira fácil de verificar se hekadainda está ativo, eu iniciaria o daemon usando ExecStartPre=/usr/bin/hekad -config=/etc/hekae ExecStartexecutaria um pequeno script que possui um loop que primeiro dorme X segundos e depois verifica se o daemon hekad ainda está em execução. Quebrar o loop somente se hekadparece ter parado.

Responder3

Você deve usar ExecStartPostpara iniciar um comando ou script que fica suspenso e depois executa uma verificação. Se sair diferente de zero, a unidade é considerada uma falha.

Ver:https://www.freedesktop.org/software/systemd/man/systemd.service.html

informação relacionada