Tengo una máquina Ubuntu y una máquina Debian.
En ambos quiero poder ver durante cuánto tiempo se ha conectado una interfaz de red. (Es decir, conectado a una red que obtiene una IP, etc. No es el estado físico de una cabellera). Tiempo de actividad en segundos o fecha + hora desde el último cambio o algo similar.
A partir de ahora he escrito un pequeño guión para hacer la tarea, pero parece que debería haber una forma más general de verificar esto. Un programa o algo en / proc o tal.
Mi guión:
#!/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
fuente
fuente
ip monitor
(entre otras cosas), podría valer la pena echarle un vistazo./etc/dhcp3/dhclient-enter-hooks.d/
también podría ser una opción. Pero no estoy encontrando suficiente información para decir cómo funciona exactamente.Respuestas:
El kernel de Linux no rastrea el momento en que se inicia una interfaz.
Dentro
struct net_device
no hay ningún campo que tenga unjiffies
valor para cuando se inicia una interfaz.Lo mejor que puede administrar es algún método inferido de los scripts y registros del espacio de usuario.
fuente
En mi máquina,
dhclient
NetworkManager reinicia cuando se vuelve a conectar a la red. Entonces, ¿tal vez puedas usar la hora de inicio deldhclient
proceso?fuente
Aquí está mi variante (muy similar a la tuya):
1116 segundos después de la concesión de IP.
fuente
Esto debería hacer lo que quieras, en segundos:
Qué salidas:
Teoría: obtenga una marca de tiempo
STARTTIME
, luego pruebeINTERVAL
si la puerta de enlace (víaip route show
) aún está activa; si es así, reste la marca de tiempo actual del original e imprima. De lo contrario, salga e indique que el host ha desconectado su conexión. Consulte las páginas de manual para obtener una explicación de cada una de las opciones de comando. Si no desea salida cada segundo, aumenteINTERVAL
.fuente