Eu tenho um serviço systemctl com , e ip route add
comandos ifconfig
para configurar dinamicamente 2 interfaces. De alguma forma, após alguns segundos/minutos ou aleatoriamente, a configuração simplesmente desapareceu (os IPs não são mais atribuídos, as rotas e as entradas arp desaparecem).arp
ethtool
Como posso depurar isso e por que minhas configurações desapareceram?
[Unit]
After=network-online.target
[Service]
ExecStart=/usr/local/bin/routingsf.sh enp4s0f0 enp4s0f1
[Install]
WantedBy=network-online.target
Eu tenho muitos processos de merda, como os Avahi-daemon
que enviam pacotes para transmissão, mesmo que eu não queira. Essas interfaces são usadas para fins de teste e não quero que pacotes indesejados sejam enviados por meio dessas interfaces.
Se
nmcli device status
tiverdisconnected
naSTATE
coluna para yourenp4s0f0
eenp4s0f1
interfaces, isso significa que o NetworkManager está assumindo o controle deles.Por favor, execute os seguintes comandos como root:
para dizer ao NetworkManager para manter suas mãos longe desses dispositivos. Isso deve resolver o seu problema. Normalmente, o NetworkManager deve armazenar essas configurações automaticamente para que elas persistam durante uma reinicialização, mas isso pode depender da distribuição Linux que você está usando.
Depois disso,
nmcli device status
deve mostrar o estado dessas interfaces de rede comounmanaged
, indicando que você estará livre para configurá-las manualmente sem nenhuma interferência do NetworkManager.E um detalhe no seu serviço systemd: se você
routingsf.sh
não incluir nada que continue rodando para sempre, mas apenas comandos do tipo "definir uma vez e pronto" comoip route add
, eifconfig
, você pode querer adicionar duas linhas à seção do seu arquivo de serviço:arp
ethtool
[Service]
Se você não especificar um tipo de serviço, o systemd assumirá
Type=simple
, o que significa que espera-se que o processo iniciado comExecStart=
seja executado indefinidamente até ser deliberadamente interrompido. Se vocêroutingsf.sh
não fizer isso, o systemd notará que o comando ExecStart foi encerrado e marcará o serviço como com falha.A combinação de
Type=oneshot
+RemainAfterExit=yes
informa ao systemd que espera-se que seu script faça algumas coisas e depois saia, e que o systemd deve mostrar o estado do seu serviço como "executando" se o script for encerrado com êxito. Você terá a opção de adicionar umaExecStop=
opção correspondente, se quiser uma maneira fácil de ativar e desativar essas configurações usando osystemctl
comando padrão.