界面启动时的网络管理器脚本?

JSS*_*all 6 network-manager

因为我使用的是Bionic Beaver/Ubuntu 18.04,所以 中的网络设置/etc/network/interfaces被忽略,并且 中的设置/etc/NetworkManager/system-connections/'eth0'用于 i) 静态 ip ii) 网关等。

我希望每次界面出现时都重新启动 sshd 服务。/etc/network/interfaces因为我使用的是 Gnome,所以它不能在正常的地方工作。我可以在哪里放置一个每次出现特定接口时运行的 NetworkManager 脚本?

PEd*_*hur 13

解决方案/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
Run Code Online (Sandbox Code Playgroud)

记得给它执行权限:

chmod +x /etc/NetworkManager/dispatcher.d/log-iface-events.sh
Run Code Online (Sandbox Code Playgroud)

坏消息是脚本不再与给定的界面或事件(例如updown )绑定。因此,您必须检查脚本中的所有内容。如果您希望此脚本仅针对 运行eth0,则必须手动过滤该脚本,并将类似以下内容的内容放入脚本中:

[[ $interface == "eth0" ]] || return 0
Run Code Online (Sandbox Code Playgroud)

例如:

#!/usr/bin/env bash

interface=$1
event=$2

if [[ $interface != "eth0" ]] || [[ $event != "up" ]]
then
  return 0
fi

# place your commands bellow this line
Run Code Online (Sandbox Code Playgroud)

仅当它正在处理接口up事件时才会运行eth0

您可以有很多脚本。根据man 8 networkmanager,脚本将按字母顺序运行。这似乎包括子目录中的脚本。您必须阅读此联机帮助页。