systemctl está ativo estado errado de saída

2

Tem problema

No mesmo host, Por que quando eu uso kill para matar um programa ilogtaild, Esta unidade ilogtaild ainda está ativa?

#systemctl status ilogtaild
● ilogtaild.service - SYSV: ilogtail is log collect agent of Simple Log Service
   Loaded: loaded (/etc/rc.d/init.d/ilogtaild; static; vendor preset: disabled)
   Active: active (running) since Fri 2017-08-18 12:38:07 CST; 1min 59s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 33718 ExecStop=/etc/rc.d/init.d/ilogtaild stop (code=exited, status=0/SUCCESS)
  Process: 33745 ExecStart=/etc/rc.d/init.d/ilogtaild start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/ilogtaild.service
           ├─33747 /usr/local/ilogtail/ilogtail
           └─33749 /usr/local/ilogtail/ilogtail


#kill -9 33747 33749


#systemctl status ilogtaild
● ilogtaild.service - SYSV: ilogtail is log collect agent of Simple Log Service
   Loaded: loaded (/etc/rc.d/init.d/ilogtaild; static; vendor preset: disabled)
   Active: active (exited) since Fri 2017-08-18 12:38:07 CST; 2min 9s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 33718 ExecStop=/etc/rc.d/init.d/ilogtaild stop (code=exited, status=0/SUCCESS)
  Process: 33745 ExecStart=/etc/rc.d/init.d/ilogtaild start (code=exited, status=0/SUCCESS)

Veja aqui

#systemctl is-active ilogtaild
active

ilogtaild configure

#systemctl cat ilogtaild
# /etc/systemd/system/ilogtaild.service
[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/rc.d/init.d/ilogtaild
Description=SYSV: ilogtail is log collect agent of Simple Log Service
Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target z_nic_irq_set.service muahao.service e2e-qos.service
After=network-online.target network.service khotfix.service
Conflicts=shutdown.target

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/etc/rc.d/init.d/ilogtaild start
ExecStop=/etc/rc.d/init.d/ilogtaild stop

Sem problemas

#systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2017-08-18 12:43:25 CST; 920ms ago
 Main PID: 36532 (crond)
   CGroup: /system.slice/crond.service
           └─36532 /usr/sbin/crond -n -m/dev/null


#kill -9 36532

#systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: failed (Result: signal) since Fri 2017-08-18 12:43:36 CST; 2s ago
  Process: 36532 ExecStart=/usr/sbin/crond -n $CRONDARGS (code=killed, signal=KILL)
 Main PID: 36532 (code=killed, signal=KILL)

Veja aqui

#systemctl is-active crond
failed

configure

#systemctl cat crond
# /usr/lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target

[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target
    
por 穆阿浩 18.08.2017 / 06:47

2 respostas

2

 ● ilogtaild.service - SYSV: ilogtail is log collect agent of Simple Log Service
   Loaded: loaded (/etc/rc.d/init.d/ilogtaild; static; vendor preset: disabled)
…
     Docs: man:systemd-sysv-generator(8)

Você não está usando uma unidade de serviço systemd explicitamente escrita. Você está usando uma unidade gerada por systemd-sysv-generator , de um script van Smoorenburg rc que não possui informações de cabeçalho LSB. systemd-sysv-generator tem uma abordagem de tamanho único, modificada com algumas suposições. van Smoorenburg rc scripts podem ou não iniciar processos de longa duração, podem ou não utilizar arquivos PID, e assim por diante. systemd-sysv-generator tenta gerar unidades de serviço que acomodem essas possibilidades.

As unidades de serviço geradas automaticamente têm RemainAfterExit=false ou RemainAfterExit=true , conforme as informações de cabeçalho no script van Smoorenburg rc nomeiem um arquivo PID. (Se ele nomear um arquivo PID, RemainAfterExit é false .)

Então:

  • A curto prazo, seu /etc/rc.d/init.d/ilogtaild deve nomear um arquivo PID com um cabeçalho RedHat pidfile: . Caso contrário, o systemd continuará a assumir que se trata de um script van Smoorenburg rc que não sai necessariamente em torno de um processo demônico de longa execução.
  • A longo prazo, você deve parar de usar /etc/rc.d/init.d/ilogtaild e parar de confiar em systemd-sysv-generator para agrupá-lo em unidades de serviço nonce.

Leitura adicional

por 18.08.2017 / 09:58
1

Deve usar RemainAfterExit = no

   RemainAfterExit=
       Takes a boolean value that specifies whether the service shall be considered active even when all its processes exited. Defaults to no.
    
por 18.08.2017 / 06:59

Tags