Como o systemd para serviços que não possuem um arquivo de unidade?

2

O Systemd pode herdar processos órfãos e existem outras maneiras de executar um serviço sem ter um arquivo de unidade para o serviço fornecido. Eu quero saber o que o pega-tudo é para serviços que não têm nenhuma definição de serviço quando uma reinicialização ou parada é emitida.

Estou especificamente interessado em sinais enviados e tempos limite, ou seja, o systemd envia todos os serviços restantes um sigterm na ordem dos nomes dos serviços lexicográficos e após 30 segundos, emite um sigkill para quaisquer serviços restantes. (Eu não sei se isso está correto, mas é o tipo de informação que me interessa).

Eu também adoraria saber onde isso está configurado e documentado.

    
por Gregg Leventhal 31.07.2018 / 15:48

1 resposta

0

Eu dei uma olhada rápida no código-fonte e nas man pages, e acho que a resposta simples é:

TimeoutStopSec= Configures the time to wait for stop. If a service is asked to stop, but does not terminate in the specified time, it will be terminated forcibly via SIGTERM, and after another timeout of equal duration with SIGKILL (see KillMode= in systemd.kill(5)). Takes a unit-less value in seconds, or a time span value such as "5min 20s". Pass "0" to disable the timeout logic. Defaults to DefaultTimeoutStopSec= from the manager configuration file (see systemd-system.conf(5)).

Então eu olho para /etc/systemd/system.conf e encontro:

#DefaultTimeoutStopSec=90s

Assim, quando o alvo de reinicialização do systemd acontece, o systemd obtém um conjunto de pids para as crianças de sua propriedade. Olhando para o código fonte, systemd / src / core / killall.c parece mostrar que:

static int killall(int sig, Set *pids, bool send_sighup) 

pega uma lista de pids para todos os filhos do systemd e é chamada por:

broadcast_signal(int sig, bool wait_for_exit, bool send_sighup)

Qual é o mesmo arquivo. Então eu assumo que qualquer filho de pid 1, irá eventualmente obter o sinal padrão de SIGTERM, e sem um arquivo unitário, o SIGHUP opcional provavelmente nunca é enviado, ele irá esperar o DefaultTimeoutStopSec configurado e então enviar um SIGKILL.

    
por 01.08.2018 / 15:44