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 curl
comando é executado várias vezes, o arquivo termina 2 ou 3 vezes no servidor ftp e, quando olho para os processos, parece que há várias instâncias de execução automática ... Não tenho certeza se é assim autossh faz as coisas ou não, mas com certeza o curl não deve carregar o arquivo várias vezes.
Meu palpite é que o sshstart
script inteiro é executado várias vezes, mas não entendo o porquê.
Tentei procurar detalhes sobre o processo de configuração da rede na inicialização, mas tudo o que pude 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 da seguinte forma (removemos as linhas vazias acima da postagem):
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
post-up /etc/network/if-up.d/sshstart
E 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
Por isso, foi executado 4 vezes :( o que está acontecendo?
echo $(date)
é meio estranho e indireto. Poderia muito bem soletrar isso comodate
. Semelhante ao Prêmio Uso Inútil do Gato .Respostas:
Os arquivos
/etc/network/if-up.d
já são executados automaticamente sempre que uma interface (qualquer interface) é exibida. Ao especificar o mesmo script para executar novamente em umpost-up
comando explícito , você faz com que o script seja executado novamente. Então, acho que é isso que deve acontecer:lo
surge (com variável de ambienteIFACE=lo
) devido à localização/etc/network/if-up.d
.eth0
surge (com variável de ambienteIFACE=eth0
) pelo mesmo motivo.eth0
surge (com a variável de ambienteIFACE
não definida) porque você solicitou isso em umapost-up
diretiva.Não sei de onde vem a quarta vez, mas de qualquer maneira já são três.
Você precisa localizar o script em outro lugar e executá-lo uma vez usando uma
post-up
diretiva ou deixá-lo onde está, mas não o mencione em umapost-up
diretiva e verifique o valor de$IFACE
para que ele não faça nada, a menos que a interface desejada (eth0
) tenha chegado acima.fonte
--all
. Parece que há um recurso para executar osif-up.d
scripts pela última vez com esse argumento para sinalizar que todas as interfaces estão ativadas, caso algum script queira executar uma ação, uma vez que se saiba que não há outras interfaces pendentes. Isso explica a quarta vez.Conforme declarado pela Celada, os
/etc/network/if-up.d
scripts são executados para cada interface. Para evitar a duplicação de regras, basta adicionar:no topo do seu script. Isso fará com que o script saia imediatamente se a interface não for a desejada.
fonte
Exclua a linha vazia antes do
post-up
comando. Isso deve relacionar opost-up
comandoeth0
apenas. Além disso, mova seu script para fora daif-up.d
pasta. Os scripts nessa pasta são executados automaticamente, independentemente de serem definidos comopost-up
. No seu caso, ele será executado adicionalmente ao seupost-up
comando.fonte