O systemd suporta reinicialização em falha para daemons de bifurcação?

4

Originalmente postado no StackOverflow , disse para vir perguntar aqui. Para recapitular essa conversa -

  1. Não, realmente não consegui fazer a alteração para ver o que acontece (não sem afetar potencialmente um serviço de produção em execução).
  2. due diligence RTFM feito. Eles não cobrem isso.

A minha pergunta SO original é a seguinte:

Suponha que eu tenha o seguinte no meu arquivo de unidade do systemd:

Type=forking
Restart=on-failure

O processo pai sai com status 0 (filho iniciado com sucesso). Em algum momento posterior, a criança morre com um status diferente de zero. O que acontece? O systemd pode rastrear o PID do processo do daemon filho:

Process: 1768 ExecStart=/bin/mydaemon (code=exited, status=0/SUCCESS)
Main PID: 1770 (mydaemon)

"Restart = on-failure" está apenas olhando para o status de saída pai ou também para o filho?

    
por Matt 10.07.2017 / 19:49

1 resposta

3

Eu criei o seguinte arquivo de unidade:

[Unit]
Description=Something

[Service]
Type=forking
WorkingDirectory=/tmp
ExecStart=/tmp/script.sh
ExecStop=/tmp/script.sh
Restart=on-failure

O script.sh contém o seguinte:

#!/bin/sh
echo "Forking"
/tmp/myscript.sh &

O myscript.sh contém o seguinte:

#!/bin/sh
sleep 60
exit 1

Com certeza, a cada 60 segundos, o systemd reinicia o serviço.

Como mostrado aqui, observe os diferentes PIDs e os horários de início, observe que ele reinicia o pai:

linux:~ # systemctl status myService.service
● myService.service - Something
   Loaded: loaded (/etc/systemd/system/myService.service; static; vendor preset: disabled)
   Active: active (running) since Mon 2017-07-10 20:43:29 CEST; 57s ago
  Process: 4393 ExecStart=/tmp/script.sh (code=exited, status=0/SUCCESS)
 Main PID: 4396 (script.sh)
    Tasks: 2 (limit: 512)
   CGroup: /system.slice/myService.service
           ├─4396 /bin/sh /tmp/script.sh
           └─4397 sleep 60

Jul 10 20:43:29 linux.suse systemd[1]: Starting Something...
Jul 10 20:43:29 linux.suse script.sh[4393]: Forking
Jul 10 20:43:29 linux.suse systemd[1]: Started Something.
linux:~ # systemctl status myService.service
● myService.service - Something
   Loaded: loaded (/etc/systemd/system/myService.service; static; vendor preset: disabled)
   Active: active (running) since Mon 2017-07-10 20:44:29 CEST; 1s ago
  Process: 4409 ExecStop=/tmp/script.sh (code=exited, status=0/SUCCESS)
  Process: 4417 ExecStart=/tmp/script.sh (code=exited, status=0/SUCCESS)
 Main PID: 4420 (script.sh)
    Tasks: 2 (limit: 512)
   CGroup: /system.slice/myService.service
           ├─4420 /bin/sh /tmp/script.sh
           └─4421 sleep 60

Jul 10 20:44:29 linux.suse systemd[1]: Starting Something...
Jul 10 20:44:29 linux.suse script.sh[4417]: Forking
Jul 10 20:44:29 linux.suse systemd[1]: Started Something.
    
por 10.07.2017 / 20:26

Tags