Поскольку я использую Бионического Бобра/Ubuntu 18.04, параметры сети в /etc/network/interfaces
игнорируются и настройки в /etc/NetworkManager/system-connections/'eth0'
используются для i) статического IP ii), шлюз и т.д.
Я хочу перезапустить sshd сервис каждый раз, когда интерфейс подходит. Это не работает в нормальном месте /etc/network/interfaces
так как я использую Gnome. Куда я могу поместить сценарий NetworkManager, который будет выполнен каждый раз, когда определенный интерфейс подходит?
Решение состоит в том, чтобы создать сценарии диспетчеров в /etc/NetworkManager/dispatcher.d
. Например, Вы могли зарегистрировать события в journald
путем размещения следующего сценария в /etc/NetworkManager/dispatcher.d/log-iface-events.sh
:
#!/usr/bin/env bash
interface=$1
event=$2
echo "$interface received $event" | systemd-cat -p info -t dispatch_script
Не забудьте давать ему полномочия выполнения:
chmod +x /etc/NetworkManager/dispatcher.d/log-iface-events.sh
Плохие новости - то, что сценарии больше не связываются с данным интерфейсом или событиями такой как или вниз. Следовательно, необходимо проверить все это в сценарии. Если Вы хотите, чтобы этот сценарий работал только за eth0
, необходимо отфильтровать это рукой, поместив что-то как следующее в сценарии:
[[ $interface == "eth0" ]] || return 0
Например:
#!/usr/bin/env bash
interface=$1
event=$2
if [[ $interface != "eth0" ]] || [[ $event != "up" ]]
then
return 0
fi
# place your commands bellow this line
Будет работать, только если это имеет дело с up
события для eth0
интерфейс.
У Вас может быть много сценариев. Согласно man 8 networkmanager
, сценарии будут работать в алфавитном порядке. Это, кажется, включает сценарии в подкаталоги. НЕОБХОДИМО прочитать эту страницу справочника.