Eu tenho uma máquina Ubuntu e uma máquina Debian.
Nos dois, quero poder ver por quanto tempo uma interface de rede está conectada. (Ou seja, conectado a uma rede recebendo um IP, etc. Não é o estado físico de um cabel). Tempo de atividade em segundos ou data e hora desde a última alteração ou algo semelhante.
Até agora, escrevi um pequeno script para executar a tarefa, mas parece que deve haver uma maneira mais geral de verificar isso. Um programa ou algo em / proc ou algo parecido.
Meu script:
#!/bin/bash
if [ -f /etc/os-release ]; then
if TMP=$(grep -i 'ubuntu' /etc/os-release); then
# we are on ubuntu
for i in $(/bin/ls -1 /var/log/syslog* | sort -r); do
TMP=$(zgrep '(eth0): device state change: ip-config -> activated' "$i" | tail -1 | sed "s/ "$(hostname)"/*/")
done
WHEN=$(echo "$TMP" | cut -f1 -d '*')
SEC=$(echo "$(date +%s) - $(date -d "$WHEN" +%s)" | bc)
echo "Last link up: $WHEN ($SEC seconds ago)."
elif TMP=$(grep -i 'debian' /etc/os-release); then
# we are on debian
TMP=$(grep 'eth0: link up' /var/log/syslog* | tail -1 | cut -f2- -d':' | sed "s/ "$(uname -n)" kernel:/*/")
WHEN=$(echo "$TMP" | cut -f1 -d '*')
SEC=$(echo "$(date +%s) - $(date -d "$WHEN" +%s)" | bc)
echo "Last link up: $WHEN ($SEC seconds ago)."
fi
else
echo "File /etc/os-release not found."
fi
linux
ubuntu
networking
debian
Stefan Lithén
fonte
fonte
ip monitor
(entre outras coisas), pode valer a pena dar uma olhada./etc/dhcp3/dhclient-enter-hooks.d/
também possa ser uma opção. Mas não estou encontrando informações suficientes para dizer exatamente como isso funciona.Respostas:
O kernel do Linux não controla a hora em que uma interface é iniciada.
Dentro,
struct net_device
não há campo que detenha umjiffies
valor para quando uma interface é iniciada.O melhor que você pode gerenciar é algum método inferido dos scripts e logs do espaço do usuário.
fonte
Na minha máquina
dhclient
, o NetworkManager é reiniciado ao se reconectar à rede. Então, talvez você possa usar o horário de início dodhclient
processo?fonte
Aqui está minha variante (muito semelhante à sua):
1116 - segundos após o IP concedido.
fonte
Isso deve fazer o que você quer, em segundos:
Quais saídas:
Teoria: obtenha um registro de data
STARTTIME
e hora e , em seguida, testeINTERVAL
se o gateway (viaip route show
) ainda está ativo; se houver, subtraia o registro de data e hora atual do original e imprima. Caso contrário, saia e indique que o host caiu sua conexão. Veja as páginas de manual para explicação de cada uma das opções de comando. Se você não deseja saída a cada segundo, aumenteINTERVAL
.fonte