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_deviceno hay ningún campo que tenga unjiffiesvalor 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,
dhclientNetworkManager reinicia cuando se vuelve a conectar a la red. Entonces, ¿tal vez puedas usar la hora de inicio deldhclientproceso?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 pruebeINTERVALsi 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