Não use Type=idle - ele foi adicionado especificamente para o prompt de login e é tão confiável quanto um teste de dados. Apenas declare as dependências explicitamente. (Para um script de execução curta, Type=oneshot está certo.)
Seu serviço se comunica com o libvirtd usando virsh , o que significa que ele só funciona quando o libvirtd já está em execução. Portanto:
[Unit]
Requires=libvirtd.service
After=libvirtd.service
(Ajuste se a sua distribuição chamar o serviço de forma diferente.)
Além disso, os serviços de auto-desativação podem não ser a melhor ideia. Em vez disso, você poderia usar:
[Unit]
ConditionPathExists=!/srv/virtual_machines