仅在连接到特定 WiFi 网络时运行 CRON 作业

仅在连接到特定 WiFi 网络时运行 CRON 作业

我是 Linux(Lubuntu)脚本编写的新手,但我想编写一个脚本,仅当我的笔记本电脑连接到家里的 wifi 时才运行 cron 作业。

这可能吗?

我想,我可以使用 iwconfig 做一些事情,然后使用 grep 从那里提取 ESSID?

到目前为止,我尝试了这个并且似乎有效:

#!/bin/bash
# CRON, connected to specific WIFI
clear
netid=HOFF216
if iwconfig | grep $netid
then 
    clear   
    echo "True, we are connected to $netid"
    rsync ...........
else
    clear       
    echo "False, we are not connected to $netid"
fi

答案1

我建议无条件地运行 cronjob 脚本(即,不管您是否连接到 wifi)。然后脚本本身会检查 wifi 网络,如果您没有连接到正确的网络,则退出。

要检查你连接到哪个网络,我建议使用nmcli。它将输出类似以下内容的内容:

[jk@pororo ~]$ nmcli dev wifi 列表
SSID BSSID 模式 频率 速率 信号安全 活动  
'其他网络' <bssid-1> 基础设施 2412 MHz 54 MB/s 32 WPA WPA2 否      
‘some-other-network’ <bssid-2> 基础设施 2412 MHz 54 MB/s 25 WEP 否      
'my-network' <bssid-3> 基础设施 2462 MHz 54 MB/s 99 WPA2 是

为了编写这个脚本,我建议这样做:

# extract the essid from nmcli output
essid=$(nmcli dev wifi list | sed -n "s/^'\([^']*\)'.*yes\s*$/\1/p")

# check for my-network, exit otherwise
[ "$essid" == "my-network" ] || exit

# now we know we're connected to my-network

答案2

根据您的工作,我现在在脚本中使用以下内容:

# Check if we are home
essid=`nmcli con status|grep <ESSID>|awk '{print $1}'`
[ "$essid" = "<ESSID>" ] || exit

答案3

在 Ubuntu 16.10 Yakkety、nmcli 工具版本 1.2.4 上,输出看起来有所不同。我最终使用了以下内容:

essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit

相关内容