Выполнять задание CRON только при подключении к определенной сети Wi-Fi

Я новичок в написании сценариев в Linux (Lubuntu), но я хотел бы создать скрипт, выполняющий работу cron, только если мой ноутбук подключен к домашнему wifi.

Возможно ли это?

Я думаю, я мог бы что-то сделать с iwconfig и вытащить ESSID оттуда с помощью grep?

До сих пор я пробовал это и, похоже, работал:

#!/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
2
задан 15 June 2012 в 20:22

15 ответов

В Ubuntu 16.10 Yakkety, приложение для ядра ncl1.1 версии 1.2.4, результат выглядит иначе. В итоге я использовал следующее:

essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit
0
ответ дан 25 July 2018 в 18:30

Я предлагаю запустить сценарий cronjob безоговорочно (т. е. независимо от того, подключен ли к Wi-Fi или нет). Сам сценарий будет проверять сеть Wi-Fi и выйти, если вы не подключены к правильному.

Чтобы проверить, к какой сети вы подключены, я бы предложил использовать nmcli. Он выведет что-то вроде:

[jk@pororo ~]$ nmcli dev wifi list
SSID                              BSSID       MODE             FREQ       RATE       SIGNAL   SECURITY   ACTIVE  
'other-network'                   <bssid-1>   Infrastructure   2412 MHz   54 MB/s    32       WPA WPA2   no      
'some-other-network'              <bssid-2>   Infrastructure   2412 MHz   54 MB/s    25       WEP        no      
'my-network'                      <bssid-3>   Infrastructure   2462 MHz   54 MB/s    99       WPA2       yes

Чтобы создать сценарий, я бы предложил что-то вроде:

# 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
6
ответ дан 25 July 2018 в 18:30

Я предлагаю запустить сценарий cronjob безоговорочно (т. е. независимо от того, подключен ли к Wi-Fi или нет). Сам сценарий будет проверять сеть Wi-Fi и выйти, если вы не подключены к правильному.

Чтобы проверить, к какой сети вы подключены, я бы предложил использовать nmcli. Он выведет что-то вроде:

[jk@pororo ~]$ nmcli dev wifi list
SSID                              BSSID       MODE             FREQ       RATE       SIGNAL   SECURITY   ACTIVE  
'other-network'                   <bssid-1>   Infrastructure   2412 MHz   54 MB/s    32       WPA WPA2   no      
'some-other-network'              <bssid-2>   Infrastructure   2412 MHz   54 MB/s    25       WEP        no      
'my-network'                      <bssid-3>   Infrastructure   2462 MHz   54 MB/s    99       WPA2       yes

Чтобы создать сценарий, я бы предложил что-то вроде:

# 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
6
ответ дан 2 August 2018 в 00:41

В Ubuntu 16.10 Yakkety, приложение для ядра ncl1.1 версии 1.2.4, результат выглядит иначе. В итоге я использовал следующее:

essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit
2
ответ дан 2 August 2018 в 00:41

Я предлагаю запустить сценарий cronjob безоговорочно (т. е. независимо от того, подключен ли к Wi-Fi или нет). Сам сценарий будет проверять сеть Wi-Fi и выйти, если вы не подключены к правильному.

Чтобы проверить, к какой сети вы подключены, я бы предложил использовать nmcli. Он выведет что-то вроде:

[jk@pororo ~]$ nmcli dev wifi list
SSID                              BSSID       MODE             FREQ       RATE       SIGNAL   SECURITY   ACTIVE  
'other-network'                   <bssid-1>   Infrastructure   2412 MHz   54 MB/s    32       WPA WPA2   no      
'some-other-network'              <bssid-2>   Infrastructure   2412 MHz   54 MB/s    25       WEP        no      
'my-network'                      <bssid-3>   Infrastructure   2462 MHz   54 MB/s    99       WPA2       yes

Чтобы создать сценарий, я бы предложил что-то вроде:

# 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
6
ответ дан 4 August 2018 в 16:12

В Ubuntu 16.10 Yakkety, приложение для ядра ncl1.1 версии 1.2.4, результат выглядит иначе. В итоге я использовал следующее:

essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit
2
ответ дан 4 August 2018 в 16:12

Я предлагаю запустить сценарий cronjob безоговорочно (т. е. независимо от того, подключен ли к Wi-Fi или нет). Сам сценарий будет проверять сеть Wi-Fi и выйти, если вы не подключены к правильному.

Чтобы проверить, к какой сети вы подключены, я бы предложил использовать nmcli. Он выведет что-то вроде:

[jk@pororo ~]$ nmcli dev wifi list
SSID                              BSSID       MODE             FREQ       RATE       SIGNAL   SECURITY   ACTIVE  
'other-network'                   <bssid-1>   Infrastructure   2412 MHz   54 MB/s    32       WPA WPA2   no      
'some-other-network'              <bssid-2>   Infrastructure   2412 MHz   54 MB/s    25       WEP        no      
'my-network'                      <bssid-3>   Infrastructure   2462 MHz   54 MB/s    99       WPA2       yes

Чтобы создать сценарий, я бы предложил что-то вроде:

# 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
6
ответ дан 6 August 2018 в 00:50

В Ubuntu 16.10 Yakkety, приложение для ядра ncl1.1 версии 1.2.4, результат выглядит иначе. В итоге я использовал следующее:

essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit
2
ответ дан 6 August 2018 в 00:50

Я предлагаю запустить сценарий cronjob безоговорочно (т. е. независимо от того, подключен ли к Wi-Fi или нет). Сам сценарий будет проверять сеть Wi-Fi и выйти, если вы не подключены к правильному.

Чтобы проверить, к какой сети вы подключены, я бы предложил использовать nmcli. Он выведет что-то вроде:

[jk@pororo ~]$ nmcli dev wifi list
SSID                              BSSID       MODE             FREQ       RATE       SIGNAL   SECURITY   ACTIVE  
'other-network'                   <bssid-1>   Infrastructure   2412 MHz   54 MB/s    32       WPA WPA2   no      
'some-other-network'              <bssid-2>   Infrastructure   2412 MHz   54 MB/s    25       WEP        no      
'my-network'                      <bssid-3>   Infrastructure   2462 MHz   54 MB/s    99       WPA2       yes

Чтобы создать сценарий, я бы предложил что-то вроде:

# 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
6
ответ дан 7 August 2018 в 18:15

В Ubuntu 16.10 Yakkety, приложение для ядра ncl1.1 версии 1.2.4, результат выглядит иначе. В итоге я использовал следующее:

essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit
2
ответ дан 7 August 2018 в 18:15

В Ubuntu 16.10 Yakkety, приложение для ядра ncl1.1 версии 1.2.4, результат выглядит иначе. В итоге я использовал следующее:

essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit
2
ответ дан 10 August 2018 в 07:00

Я предлагаю запустить сценарий cronjob безоговорочно (т. е. независимо от того, подключен ли к Wi-Fi или нет). Сам сценарий будет проверять сеть Wi-Fi и выйти, если вы не подключены к правильному.

Чтобы проверить, к какой сети вы подключены, я бы предложил использовать nmcli. Он выведет что-то вроде:

[jk@pororo ~]$ nmcli dev wifi list
SSID                              BSSID       MODE             FREQ       RATE       SIGNAL   SECURITY   ACTIVE  
'other-network'                   <bssid-1>   Infrastructure   2412 MHz   54 MB/s    32       WPA WPA2   no      
'some-other-network'              <bssid-2>   Infrastructure   2412 MHz   54 MB/s    25       WEP        no      
'my-network'                      <bssid-3>   Infrastructure   2462 MHz   54 MB/s    99       WPA2       yes

Чтобы создать сценарий, я бы предложил что-то вроде:

# 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
6
ответ дан 10 August 2018 в 07:00

Основываясь на вашей работе, я использую в своем скрипте следующее:

# Check if we are home
essid=`nmcli con status|grep <ESSID>|awk '{print $1}'`
[ "$essid" = "<ESSID>" ] || exit
2
ответ дан 12 August 2018 в 11:41

В Ubuntu 16.10 Yakkety, приложение для ядра ncl1.1 версии 1.2.4, результат выглядит иначе. В итоге я использовал следующее:

essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit
0
ответ дан 15 August 2018 в 18:58

Я предлагаю запустить сценарий cronjob безоговорочно (т. е. независимо от того, подключен ли к Wi-Fi или нет). Сам сценарий будет проверять сеть Wi-Fi и выйти, если вы не подключены к правильному.

Чтобы проверить, к какой сети вы подключены, я бы предложил использовать nmcli. Он выведет что-то вроде:

[jk@pororo ~]$ nmcli dev wifi list
SSID                              BSSID       MODE             FREQ       RATE       SIGNAL   SECURITY   ACTIVE  
'other-network'                   <bssid-1>   Infrastructure   2412 MHz   54 MB/s    32       WPA WPA2   no      
'some-other-network'              <bssid-2>   Infrastructure   2412 MHz   54 MB/s    25       WEP        no      
'my-network'                      <bssid-3>   Infrastructure   2462 MHz   54 MB/s    99       WPA2       yes

Чтобы создать сценарий, я бы предложил что-то вроде:

# 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
6
ответ дан 15 August 2018 в 18:58
  • 1
    Для скрипта может быть проще проанализировать вывод nmcli dev list iface eth1 или iw dev eth1 link (заменив eth1 на соответствующий интерфейс). – James Henstridge 14 June 2012 в 06:07
  • 2
    nmcli dev list немного сложнее, так как вам нужно найти активную точку доступа. nm dev wifi list выглядит многообещающим, но я буду обновлять его. – Jeremy Kerr 14 June 2012 в 06:28
  • 3
    Вы можете уменьшить seddery, используя что-то вроде nmcli -t -f name con show --active. Это даст вам список сетевых имен, которые активны без какой-либо другой посторонней информации. Объедините с grep -q. – Robie Basak 2 February 2017 в 03:48

Другие вопросы по тегам:

Похожие вопросы: