Por que os comandos de post-up em / etc / network / interfaces foram executados várias vezes durante a inicialização?

8

Aqui está o conteúdo de /etc/network/interfaces :

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

post-up /etc/network/if-up.d/sshstart

E sshstart é um script com o seguinte:

curl something something darkside send a file over ftps in the background &
/usr/bin/autossh -M 0 -f -N -o ServerAliveInterval=15 -o ServerAliveCountMax=3 -R 127.0.0.1:2005:127.0.0.1:22 -R 192.168.1.10:2006:192.168.2.110:1912 -L 127.0.0.1:5249:192.168.1.212:5249 [email protected] -p 8080

Quando a máquina é reinicializada, o comando curl é executado várias vezes, o arquivo é finalizado 2 ou 3 vezes no servidor ftp e, quando olho para os processos, parece que há várias instâncias do autossh em execução ... Não tenho certeza se é assim que o autossh faz as coisas ou não, mas com certeza o curl não deve carregar o arquivo várias vezes.

Meu palpite é que todo o script sshstart foi executado várias vezes, mas não entendo o motivo.

Eu tentei pesquisar detalhes sobre o processo de configuração de rede na inicialização, mas tudo que consegui encontrar foram informações de sintaxe para o arquivo de interfaces.

Alguém pode ajudar por favor?

Obrigado.

--- Editar ---

Como sugerido abaixo, modifiquei meu arquivo de interfaces como segue (removi as linhas vazias acima do post-up):

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
post-up /etc/network/if-up.d/sshstart

Adicionou a seguinte linha ao sshstart:

echo $(date)>>/run/shm/sshstart.log

Aqui está o conteúdo de /run/shm/sshstart.log após uma reinicialização:

Wed Oct 29 08:07:00 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Wed Oct 29 08:07:07 EDT 2014

Então, ele foi executado 4 vezes :( o que está acontecendo?

    
por TCZ8 28.10.2014 / 19:25

3 respostas

11

Os arquivos em /etc/network/if-up.d são executados automaticamente sempre que uma interface (qualquer interface) é exibida. Quando você especifica o mesmo script para ser executado novamente em um comando explícito post-up , você só faz com que o script seja executado novamente. Então, meu palpite é que isso deve acontecer:

  • Ele é executado uma vez quando lo aparece (com a variável de ambiente IFACE=lo ) devido a estar localizado em /etc/network/if-up.d .
  • Ele é executado uma vez quando eth0 aparece (com a variável de ambiente IFACE=eth0 ) pelo mesmo motivo.
  • Ele é executado novamente quando eth0 aparece (com a variável de ambiente IFACE unset) porque você solicitou isso em uma diretiva post-up .

Não sei de onde vem a quarta vez, mas de qualquer forma já são três.

Você precisa localizar o script em outro lugar e executá-lo uma vez usando uma diretiva post-up ou deixá-lo onde estiver, mas não mencioná-lo em uma diretiva post-up e verifique o valor de $IFACE . que não faz nada a menos que a interface desejada ( eth0 ) tenha surgido.

    
por 29.10.2014 / 16:49
1

Exclua a linha vazia antes de post-up -command. Isso deve relacionar o comando post-up a eth0 apenas. Além disso, mova seu script da pasta if-up.d . Os scripts nessa pasta são executados automaticamente, independentemente de serem definidos como post-up . No seu caso, ele será executado adicionalmente ao seu post-up -command.

    
por 28.10.2014 / 22:49
1

Como afirmado pela Celada, os scripts /etc/network/if-up.d são executados para cada interface.

Para evitar a duplicação de regras, basta adicionar:
[ "$IFACE" == "eth0" ] || exit 0 no
no topo do seu script. Isso fará com que o script saia imediatamente se a interface não for a desejada.

    
por 13.07.2016 / 16:07