因为我正在使用仿生海狸/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 并监听连接状态变化。使用用户权限运行。
无耻的宣传,我是作者