![停止/启动特定 SSID 上的 SYSTEMD 服务](https://linux22.com/image/183189/%E5%81%9C%E6%AD%A2%2F%E5%90%AF%E5%8A%A8%E7%89%B9%E5%AE%9A%20SSID%20%E4%B8%8A%E7%9A%84%20SYSTEMD%20%E6%9C%8D%E5%8A%A1.png)
我仅通过具有特定示例的NFS
特定 5G 路由器连接到我的 NAS 笔记本电脑(arch linux)驱动器。当我更改 wifi 时,这种情况经常发生,例如到另一个路由器时,我希望在再次连接时卸载驱动器并重新安装回来,因为如果不这样做,文件管理器就会冻结。SSID
NASrouter_5G
NoNasRouter_2G
NASrouter_5G
在我的研究中,我发现了 [Match] 语法,但这仅检测接口名称,并且始终为 wifi0,因此这似乎不起作用。还有网络调度程序看起来很有希望,我只是没有找到任何关于如何使用它的信息。
所以我的问题是:
我该如何做到这一点,最好使用 systemd,因为我在启动时和休眠后使用 systemd 安装驱动器,并且工作正常。但任何方式都是值得赞赏的,因为我不想每次更改网络时都输入sudo systemctl stop nfs_moun
t 或 some 。alias
挂载服务文件包含以下内容:
[jack@jacks ~]$ cat /usr/lib/systemd/system/nfs_mount.service
[Unit]
Descritpion=Documents Mount NAS systemctl start nfs_mount
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target syslog.target network-online.target
Wants=syslog.target network-online.target
[Service]
Type=oneshot
ExecStart=/home/jack/nfs_mount.sh
[Install]
WantedBy=multi-user.target suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
答案1
有systemd单元预定义条件可以使用,但其中任何一个都符合此用例。
由于您的服务是一次性第一,一旦主进程终止,服务将变得不活动。所以使用简单的到守护进程服务与无限循环和包裹您的 nfs_mount.sh 脚本带有基于 SSID 比较的 IF 语句可以实现:
#!/bin/sh
while :
do
sleep 5
if [ "$(iwgetid -r)" == 'your_ssid' ] ; then
# Your code here
else
# If it was not a oneshot service you can make a place here for a code to kill the service
fi
done
因此,只有当您的系统连接到与所需 SSID 匹配的 WIFI 时,才会挂载文件系统。