接口启动时网络管理器脚本?

接口启动时网络管理器脚本?

因为我正在使用仿生海狸/Ubuntu 18.04,中的网络设置/etc/network/interfaces将被忽略并且中的设置/etc/NetworkManager/system-connections/'eth0'将用于i)静态ip ii)网关等。

我希望每次接口启动时都重新启动 sshd 服务。由于我使用的是 Gnome,所以在正常情况下无法正常工作/etc/network/interfaces。我可以在哪里放置一个 NetworkManager 脚本,让它每次特定接口启动时运行?

答案1

解决方案是创建调度员脚本在 中/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,脚本将按字母顺序运行。这似乎包括子目录中的脚本。您必须阅读此手册页。

答案2

网络管理器连接操作连接到 dbus 并监听连接状态变化。使用用户权限运行。

无耻的宣传,我是作者

相关内容