Systemd, reinicia o serviço quando o endereço IP é alterado

4

Eu escrevi um serviço bem simples:

[Unit]
Description=Service on interface %I

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/lib/project/my_script.sh start %I

[Install]
WantedBy=multi-user.target

Eu começo como systemclt start myservice@net0 , onde net0 é uma interface de rede. Como posso reiniciar o serviço toda vez que a interface de rede é reiniciada?

    
por José Luis 06.10.2014 / 18:02

1 resposta

12

Você pode ter sua unidade systemd vinculada ( BindTo ) e depender ( DependsOn ) da unidade .device da interface de rede correspondente (que é carregada automaticamente) para a interface mencionada da seguinte forma:

[Unit]
Description=Service on interface %I
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/lib/project/my_script.sh start %I

[Install]
WantedBy=multi-user.target

Você provavelmente desejará ter a dependência da unidade formalizada adicionando Wants e After se sua unidade personalizada espera ter a interface de rede realmente online adicionando-as em [Unit] seção:

Wants=network-online.target
After=network-online.target

NB: Você pode verificar se .device unidades são loaded fazendo systemctl list-units --type=device .

    
por 05.09.2015 / 22:58

Tags