Прежде чем пометить как дубликат: речь идет не о динамическом DNS или подобных вещах.
Я знаю, как запускать скрипт каждый раз, когда мои сети работают; это просто добавить скрипт в каталог, /etc/NetworkManager/dispatcher.d
как этот:
#!/bin/bash
IF=$1
STATUS=$2
case "$2" in
up)
logger -s "NM Script up $IF triggered"
su rmano -c /home/romano/bin/myscript
;;
down)
logger -s "NM Script down $IF triggered"
;;
*)
;;
esac
В моем случае myscript
это очень просто ifconfig -a > ~/Dropbox/myifconfig.txt
- я использую его, потому что мне нужно знать свой локальный IP из любого места в университете, и он будет часто меняться.
Пока все хорошо, система работает нормально. Но, к сожалению, DHCP здесь настроен таким образом, что IP-адрес иногда меняется без отключения / повышения уровня интерфейса. В этом случае скрипт (логически) не запускается, а файл не обновляется.
Я не могу использовать подход DynDNS, потому что изменение относится к локальному IP, а не к внешне видимому.
Я мог бы опросить, просто поместив скрипт в cron и выполнив его каждую минуту или напиши чуть более сложный (... если IP-адрес изменился, напишите файл, иначе ничего не делайте) и поместите его снова в качестве фоновой задачи, но это не элегантно Итак, вопрос:
Есть ли способ вызвать скрипт, когда мой локальный IP-адрес меняется?
ОБНОВЛЕНИЕ 1
Я попытался вставить сценарий на /etc/dhcp/dhclient-enter-hooks.d/
основе существующего /etc/dhcp/dhclient-enter-hooks.d/resolvconf
, но он не будет запущен. Я подозреваю (требуется подтверждение), что NM (сетевой менеджер) сам выполняет согласование dhcp, не вызывая команду dhcp ...
источник
dhclient-enter-hooks.d
скрипт ... но я никогда не пробовал! Существующий/etc/dhcp/dhclient-enter-hooks.d/resolvconf
скрипт может быть полезен с точки зрения синтаксиса и каких сигналов искать ("$reason" == "BOUND"
может бытьОтветы:
Согласно справочной странице для NetmorkManager, одно из событий
Я думаю, что вы можете просто изменить
в
источник
Я предоставляю сценарий, который прослушивает сигналы dbus, который позволит вам реагировать быстрее, чем если бы вы запрашивали изменения в текущей конфигурации сети. Это помогает в системах, где скрипты / etc / не выполняются, когда вы этого хотите (как в моей системе 14.04).
мои входы / выходы не работают
NetworkManager запускает dhclient с флагом,
-sf /usr/lib/NetworkManager/nm-dhcp-client.action
который, кажется, переопределяет нормальное поведение входа / выхода. Поведение по умолчанию с dhclient - вызывать скрипты в/etc/dhcp/dhclient-{enter,exit}-hooks.d
. Это не вызывается вообще в моей системе.мои скрипты NetworkManager dispatcher.d тоже не работают
NM, однако, вызывает другой набор скриптов
/etc/NetworkManager/dispatcher.d
для информирования о различных событиях. Страница man NetworkManager (8) определяетdhcp4-change
иdhcp6-change
действия, которые, кажется, делают именно то, что вы хотите. Несмотря на то, что написано в man-странице, по крайней мере, в моей системе толькоup
иdown
выполняются действия. Я не могу заставить эти сценарии запускать что-либо еще. Так что это не очень хороший способ отслеживать изменения IP.Итак, отслеживание непосредственно по сигналам dbus, излучаемым NM
nm-dhcp-client.action
( source ) из командной строки просто преобразует все переменные окружения, установленные dhclient, в сигнал dbus. Эти переменные среды определены вman dhclient-script
(8). Один из них представляет особый интерес$new_ip_address
. Как вы можете предположить, @Bernhard, вы могли бы контролировать сигнал и действовать в соответствии с его содержимым.Вот программа, которая отследит все данные о событиях, сообщенные этим двоичным файлом:
Вывод dbus-monitor непросто проанализировать в скриптах. Возможно, легче инициировать наличие определенных ключевых слов, например
new_ip_address
, и оттуда использовать различные инструменты для получения информации, которая изменилась (например, ip или ifconfig).Дать ему шанс!
источник
Подход к опросу с использованием скрипта Python. Основная идея состоит в том, чтобы постоянно анализировать выходные данные
ip -4 -o add show <INTERFACE>
и сравнивать текущий результат с предыдущей итерациейисточник
Хотя NetworkManager использует dhclient, он предоставляет свои собственные двоичные файлы в качестве замены dhclient-scripts. (Для справки: вы можете найти двоичный файл NM в
/usr/lib/NetworkManager/nm-dhcp-client.action
).Возможно, вы могли бы использовать другой подход: NM генерирует сигнал DBus для всех событий. Вы можете прослушать в системном DBus соответствующее событие и запустить свой сценарий на основе этого ...
источник