# trigger-poweroff.service
[Unit]
DefaultDependencies=no
Before=shutdown.target
[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl --no-block poweroff
DefaultDependencies=no
evita um Conflicts=shutdown.target
implícito. Isso significa que não importa se o serviço é iniciado com o modo de trabalho replace-irreversible
. Também evita um Wants=sysinit.target
implícito; isto seria inferior ao ideal, por ex. se você quisesse iniciar este serviço após a transição para emergency.target
.
Before=shutdown.target
garante que o serviço termine antes que o desligamento do systemd comece a enviar sinais. Se nada mais, isso torna a unidade mais simples para analisar a correção. Evitamos um impasse certificando-nos de que o serviço também não espere que o desligamento seja concluído.
Não importa se systemd-shutdown
matou o processo systemctl com SIGTERM. O processo simplesmente terminaria com o status WIFSIGNAL
e um WTERMSIG
de SIGTERM
. O Systemd trata isso como uma saída limpa e bem-sucedida. Veja a definição de SuccessExitStatus em man systemd.exec
. No entanto, se o kernel misteriosamente não agendou essa saída inicial antes do systemd DEFAULT_TIMEOUT_USEC
, o systemd-shutdown enviaria o sinal não bloqueado SIGKILL. Systemd não trataria isso como uma saída bem-sucedida.