停止/启动特定 SSID 上的 SYSTEMD 服务

停止/启动特定 SSID 上的 SYSTEMD 服务

我仅通过具有特定示例的NFS特定 5G 路由器连接到我的 NAS 笔记本电脑(arch linux)驱动器。当我更改 wifi 时,这种情况经常发生,例如到另一个路由器时,我希望在再次连接时卸载驱动器并重新安装回来,因为如果不这样做,文件管理器就会冻结。SSIDNASrouter_5GNoNasRouter_2GNASrouter_5G

在我的研究中,我发现了 [Match] 语法,但这仅检测接口名称,并且始终为 wifi0,因此这似乎不起作用。还有网络调度程序看起来很有希望,我只是没有找到任何关于如何使用它的信息。

所以我的问题是:

我该如何做到这一点,最好使用 systemd,因为我在启动时和休眠后使用 systemd 安装驱动器,并且工作正常。但任何方式都是值得赞赏的,因为我不想每次更改网络时都输入sudo systemctl stop nfs_mount 或 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 时,才会挂载文件系统。

相关内容