Как запустить скрипт в зависимости от подключения к интернету

48

Я часто монтирую удаленный диск с помощью sshfs. Я хотел бы иметь это крепление автоматически. Однако, если я монтирую его в своем .bashrc или в скриптах запуска, монтирование часто завершается неудачно, потому что мое беспроводное интернет-соединение еще не установлено.

Кто-нибудь знает простой способ выполнения bash-скрипта при каждом установлении соединения или автоматического монтирования диска sshfs?

jmite
источник

Ответы:

57

Добавьте свой скрипт в /etc/network/if-up.d/. Назовите ваш сценарий без расширения «.sh».

Также после добавления скрипта запустите, chmod +x /etc/network/if-up.d/yourscriptnameчтобы дать необходимое разрешение.

Убедитесь, что в файле указан сетевой интерфейс (например, wlan0 или eth0), который должен запускать ваш скрипт при включении /etc/network/interfaces.

dedunumax
источник
12
внутри скриптов /etc/network/*.d/вы можете использовать переменную, $IFACEчтобы узнать, какой интерфейс получает соединение, так что вы можете пропустить процедуру, если это, например, проводное соединение.
Карлос Кампдеррос
Есть ли способ указать, для какой конкретной сети вы хотите это сделать? когда это моя домашняя сеть, я хочу сделать сценарий, но когда я выйду из сети, я не захочу ...
Джошуа Робисон
3
это на самом деле, кажется, не работает вообще. Я знаю, что мои скрипты работают, потому что я могу запустить их, используя ./ в терминале, и они работают, но когда я выключаю и устанавливаю соединение, скрипты вообще не вызываются. Есть ли что-то, что я должен сделать, чтобы ссылаться на них каким-то образом? кажется, что для удаления сценария в if-up.d не хватает шага?!?!
Джошуа Робисон
1
проверьте, имеют ли они правильные разрешения, пожалуйста.
dedunumax
2
Пожалуйста, добавьте, что именно должно войти, interfacesкогда его там нет. Это auto wlan0и iface wlan0 inet dhcpеще что?
Cookie
25

Примечание редактора: Cuttlefish не обновлялся с 2012 года и не находится ни в одном из текущих репозиториев Ubuntu

Ubuntu 12.04

  • Установите Cuttlefish : простой инструмент, который реализует рефлексы на вашем компьютере, выполняя действия при срабатывании определенных событий.
  • Откройте каракатицу и нажмите New.

    Шаг 1

    • Дайте ему имя и измените опцию Activated by стимул на ON.
    • Нажмите на Stimulus , выберите категорию « Сеть» и введите « Подключиться к WLAN» . Нажмите ОК.

    Шаг 2

    • Вы также можете выбрать SSID беспроводной сети, и у вас есть возможность, проверять это или нет при запуске.

    Шаг 3

    • Теперь вам нужно будет указать реакцию. Перейдите на вкладку « Реакция » и нажмите «Добавить». Выберите Приложения из категории и Запустите приложение (в расширенном режиме) из типа.

    Шаг 4

    • Теперь укажите скрипт, который вы хотите запустить в исполняемой опции. Вы даже можете передать параметры в сценарий.

    Шаг-5

    • Вот и все! Также убедитесь, что вы добавляете Cuttlefish в автозагрузку приложений. Перейдите в Edit> Preferences и включите опцию автозапуска.

    Шаг-6

воспламеняться
источник
6
каракатица полностью сломана и некоторое время не видела обновлений. Хотелось бы, чтобы это получило больше развития, потому что нам нужно что-то вроде Android-приложения Tasker для Linux. Никто не хочет связываться с etc / network / interfaces и папками if-up и скриптами. Просто дай мне то, что я могу щелкнуть или включить или выключить.
Джошуа Робисон
2

Я отвечу на эту часть OP-вопроса: «Мне бы хотелось, чтобы эта гора была автоматически».

Мой любимый инструмент для автоматического подключения сетевых ресурсов - это autofs: https://help.ubuntu.com/community/Autofs

AutoFS - это мой инструмент для установки моего NAS - для всех моих ноутбуков и рабочих станций.

« autofs - это программа для автоматического монтирования каталогов по мере необходимости. Автоматическое монтирование монтируется только при обращении к нему и отключается после определенного периода бездействия. Благодаря этому автоматическое монтирование общих ресурсов NFS / Samba сохраняет пропускную способность и обеспечивает лучшую производительность». общая производительность по сравнению со статическим монтированием через fstab. "

RBell
источник
Ваш ответ, возможно, может быть немного запоздалым, так как ФП уже принял другой ответ. Ваша помощь, конечно, ценится, однако, возможно, вам будет лучше, если вы сосредоточите свои усилия на оставшихся без ответа вопросах
Wayne_Yux
Извините, Уэйн, RBell насмехался здесь последний раз - лучший ответ (об использовании Cuttlefish) больше не актуален, потому что этот пакет устарел - но autofs все еще существует, и я не видел его, если бы не этот пост. Спасибо, RBell!
KlaymenDK
1

Лучший, простой и легкий способ - добавить команду up в любой интерфейс, над которым вы хотите работать.

Интерфейсы можно найти в каталоге "/ etc / network /" под именем файла "interfaces"

iface elan0 inet manual
    up filename.sh

Это добавит команду up к elan0. Одновременно дайте это тому интерфейсу, над которым вы хотите работать. Не забудьте сделать отступ на одной вкладке.

Убедитесь, что вы дали права на выполнение файла.

sudo chmod 755 filename.sh
Ревант Кумар
источник
1
Фантастика! Работает с tun0интерфейсами VPN под управлением network-manager. Ключ использования inet manual.
KrisWebDev
1

Насколько я понимаю, /etc/network/if-up.d/решение не сработало от меня, когда я добавил /etc/network/interfacesследующее:

auto wlp58s0
iface wlp58s0 inet dhcp
post-up /home/augustin/Config/myscript.sh

Wi-Fi запустится после перезагрузки.

Но после некоторой борьбы, по этой ссылке , работало, чтобы добавить скрипт /etc/NetworkManager/dispatcher.d/в форму, 90myscript.shгде 90находится уровень приоритета скрипта, и со следующей формой:

#!/bin/bash

IF=$1
STATUS=$2

if [ "$IF" == "wlp58s0" ]
then
    case "$2" in
        up)
        # interface is up
        ;;
        down)
        # interface will be down
        ;;
        pre-up)
        # interface will be up
        ;;
        post-down)
        # interface is down
        ;;
        *)
        ;;
    esac
fi

Я предполагаю, что есть проблемы между тем, кто контролирует конфигурацию сети на системном уровне, и иногда networkповедение по умолчанию остается за диспетчером.

Кроме того, для тех, кто хотел бы - как я - попытаться иметь символическую ссылку на скрипт (чтобы сохранить файл в лучшем месте), к сожалению, он не сработал для меня.

Надеюсь это поможет!

Августин Ридингер
источник
1

systemd кажется, взял на себя управление сетью в настоящее время.

$ networkctl
WARNING: systemd-networkd is not running, output will be incomplete.

IDX LINK             TYPE               OPERATIONAL SETUP
  1 lo               loopback           n/a         unmanaged
  2 enp0s25          ether              n/a         unmanaged
  3 wlo1             wlan               n/a         unmanaged

3 links listed.

У этого также есть единицы, соответствующие интерфейсам

$ systemctl list-units |grep wlo1
sys-devices-pci0000:00-0000:00:1c.3-0000:24:00.0-net-wlo1.device                                                        loaded active plugged   Centrino Ultimate-N 6300 (3x3 AGN)
sys-subsystem-net-devices-wlo1.device                                                                                   loaded active plugged   Centrino Ultimate-N 6300 (3x3 AGN)

Видимо, вы можете использовать их в файлах сервисных единиц. Так что просто создайте сервисный модуль для запуска вашего скрипта и используйте что-то подобное внутри, чтобы он работал условно в сети:

BindsTo=sys-subsystem-net-devices-wlo1.device
After=sys-subsystem-net-devices-wlo1.device

Удачи! Я не проверял это, поэтому «ваш пробег может отличаться».

Источники:

Рольф
источник