systemd 服务在无线网络连接上运行

systemd 服务在无线网络连接上运行

我有一台服务器尝试连接到一个有时才可用的移动 AP。此 AP 是一个摄像头,其中的图像需要下载,因此当服务器连接到此特定 AP 时,我需要它运行下载脚本(我已经编写好了)。

我知道我可以做一些非常肮脏的轮询,但是有没有类似 systemd 中的 udev 桥的东西?我所有的搜索都带来了非常通用的网络内容,但并不适用。这里的关键是脚本方面。

发布这篇文章几秒钟后,不一定非要使用 systemd如果我们必须通过network-manager(管理 wifi 连接)来做到这一点,那就这样吧...但这是针对 15.10 的,目的是在 16.04 上部署,我目前在 14.04 上使用 Upstart 来执行此操作,所以...我喜欢任何可行的方法,但我也喜欢整洁。

答案1

您可以使用网络管理器调度程序脚本来挂接接口的启动和关闭事件。

sudo touch /etc/NetworkManager/dispatcher.d/00do_stuff
sudo chmod u+x /etc/NetworkManager/dispatcher.d/00do_stuff

脚本可以像这样:

#!/bin/sh
if [ $1 = wlp3s0f0 -a $2 = up -a $CONNECTION_ID = wlan ]; then
    # do stuff
fi

man networkmanager解释说,如果调度程序脚本运行时间过长,该脚本在某个时候会被终止,所以如果存在这种可能性,最好分叉另一个脚本来运行该任务:

#!/bin/sh
if [ $1 = wlp3s0f0 -a $2 = up -a $CONNECTION_ID = wlan ]; then
    (/home/user/scripts/do_stuff.sh) & disown
fi

每次触发某些事件时,网络管理器都会按字母顺序运行所有脚本/etc/NetworkManager/dispatcher.d,并将接口和事件作为参数传递。

$CONNECTION_ID通过环境提供给脚本,并且在这种情况下,它会被检查以确保我们使用正确的连接配置文件连接到报告man networkprofile(不确定这到底有什么含义。在我的情况下,如果我检查$CONNECTION_ID我的 SSID,它可以正常工作,但我不确定如果它恰好与另一个有线连接配置文件的名称匹配会发生什么)。

相关内容