Echo algum texto na inicialização da unidade systemctl

0

Eu criei este trabalho systemctl,

[Unit]
Description=Evercam Media
After=network.target

[Service]
Type=forking
User=root
Group=root
WorkingDirectory=/opt/evercam_media
ExecStart=/opt/evercam_media/bin/evercam_media start
ExecStop=/opt/evercam_media/bin/evercam_media stop
Restart=always
RestartSec=5
Environment=LANG=en_US.UTF-8
SyslogIdentifier=evercam_media

[Install]
WantedBy=multi-user.target

Está funcionando perfeitamente, como eu quero que funcione, mas eu quero mostrar alguns log on start e stop, como quando começamos ou paramos o job iniciante, ele nos mostra, o trabalho está parado ou esperando, mas não é mostrando qualquer coisa, podemos adicionar alguns logs como "Seu iniciado" ou está parado, algo assim?

Além disso, quando vejo o status desse trabalho enquanto faço systemctl status evercam_media.service , ele me mostra

● evercam_media.service - Evercam Media
   Loaded: loaded (/etc/systemd/system/evercam_media.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Tue 2017-11-07 10:53:40 CET; 1h 3min ago
  Process: 25830 ExecStop=/opt/evercam_media/bin/evercam_media stop (code=exited, status=0/SUCCESS)
  Process: 25692 ExecStart=/opt/evercam_media/bin/evercam_media start (code=exited, status=0/SUCCESS)
 Main PID: 25728 (code=exited, status=1/FAILURE)

Ativo: falha ??

Por que não está dizendo que parou em vez de falhar? qualquer ajuda seria apreciada obrigado.

    
por Junaid Farooq 07.11.2017 / 11:59

1 resposta

0

A unidade systemd está definida como Type=forking e ExecStop= é usada com um comando assíncrono.

O que significa que systemd irá matar o processo principal logo após

/opt/evercam_media/bin/evercam_media stop
sai. E Restart=always é usado em vez de Restart=on-failure .

Conforme indicado na documentação :

Note that it is usually not sufficient to specify a command for this setting that only asks the service to terminate (for example, by queuing some form of termination signal for it), but does not wait for it to do so. Since the remaining processes of the services are killed according to KillMode= and KillSignal= as described above immediately after the command exited, this may not result in a clean stop. The specified command should hence be a synchronous operation, not an asynchronous one.

Existem várias abordagens que você pode adotar para corrigir isso. Use TimeoutSec= ou use um sinal de eliminação que não torne evercam_media return 1 ou encontre uma maneira de tornar seu ExecStop= síncrono.

Quanto às mensagens de log, consulte os sinalizadores de detalhamento para evercam_media .

    
por 07.11.2017 / 12:55

Tags