У меня есть машина с Ubuntu и машина с Debian.
На обоих я хочу видеть, как долго подключен сетевой интерфейс. (То есть подключен к сети, получая IP-адрес и т. Д. Не физическое состояние кабеля). Время работы в секундах или дата + время с момента последнего изменения или что-то подобное.
На данный момент я написал небольшой скрипт для выполнения этой задачи, но, кажется, должен быть более общий способ проверить это. Программа или что-то в / proc или что-то подобное.
Мой сценарий:
#!/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
Стефан Литен
источник
источник
ip monitor
(помимо прочего), возможно, стоит посмотреть./etc/dhcp3/dhclient-enter-hooks.d/
может быть вариант. Но я не нахожу достаточно информации, чтобы сказать, как именно это работает.Ответы:
Ядро Linux не отслеживает время запуска интерфейса.
Внутри
struct net_device
нет поля, содержащегоjiffies
значение для запуска интерфейса.Лучшее, чем вы можете управлять, - это какой-то логический метод из сценариев и журналов пользовательского пространства.
источник
На моей машине
dhclient
перезапускается NetworkManager при повторном подключении к сети. Так, может быть, вы можете использовать время началаdhclient
процесса?источник
Вот мой вариант (очень похожий на ваш):
1116 - секунд после аренды IP.
источник
Это должно сделать то, что вы хотите, в считанные секунды:
Какие выводы:
Теория: Получите временную метку
STARTTIME
, затем проверьте каждый, работаетINTERVAL
ли шлюз (черезip route show
), если это так, вычтите текущую временную метку из оригинала и напечатайте. Если нет, выйдите и укажите, что хост разорвал соединение. Смотрите man-страницы для объяснения каждого из параметров команды. Если вы не хотите выводить каждую секунду, увеличьтеINTERVAL
.источник