Systemd - executando o script de encerramento de VM customizado antes do padrão libvirt-guests.service

1

Em um host KVM, tenho algumas VMs com sistemas operacionais herdados que não escutam o evento de desligamento da ACPI. Como acontece no host Debian 9.5, no desligamento, o libvirt-guests.service espera por 5 minutos para cada VM e depois a destrói.

Para evitar isso e desativá-los de maneira limpa, criei o serviço de encerramento de VM personalizado, com um script que usa métodos especiais para desativá-los:

% cat /etc/systemd/system/multi-user.target.wants/vm_stop.service 

[Unit]
Description=vm_shutdown
Before=libvirt-guests.service

[Service]
ExecStart=/bin/true
ExecStop=/usr/local/bin/vm_shutdown_all.sh

[Install]
WantedBy=multi-user.target

No entanto, no encerramento, o serviço parece rodar após libvirt-guests.service , apesar das configurações de Before= no serviço acima.

Agora, testei que o serviço personalizado, na verdade, é executado no desligamento - é touch es um arquivo de teste em que posso verificá-lo.

O problema: como posso garantir que ele seja executado antes de libvirt-guests.service ?

    
por LetMeSOThat4U 25.11.2018 / 13:42

1 resposta

1

A declaração Before= refere-se ao início do serviço. De man systemd.unit .

If a unit foo.service contains a setting Before=bar.service and both units are being started, bar.service's start-up is delayed until foo.service has finished starting up.
...
Note that when two units with an ordering dependency between them are shut down, the inverse of the start-up order is applied. i.e. if a unit is configured with After= on another unit, the former is stopped before the latter if both are shut down.

Portanto, você deseja configurar seu serviço com After=libvirt-guests.service , pois o serviço é iniciado depois que libvirt-guests.service é iniciado e seu serviço é interrompido antes que libvirt-guests.service seja interrompido.

    
por 25.11.2018 / 14:05