Acabamos criando um serviço "falso" com apenas uma ação de parada que depende de haproxy.service
e, portanto, terá sua ExecStop
executada antes que o HAProxy seja interrompido.
haproxy-state.service:
[Unit]
Description=Save HAProxy State Before Service Stop
After=haproxy.service
Requires=haproxy.service
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/sh -c "/usr/bin/socat /run/haproxy/control.socket - <<< \"show servers state\" > /var/lib/haproxy/last_state"
[Install]
WantedBy=multi-user.target haproxy.service
Ele precisa ser após haproxy.service
, por isso parará antes .
Ele precisa ser WantedBy
para que sempre seja iniciado sempre que o HAProxy estiver em execução.
Isso não é perfeito porque o estado pode mudar se houver uma longa pausa antes que o systemd pare o próximo serviço, mas isso é um risco que teremos.