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

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

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

1
задан 1 February 2015 в 13:33

5 ответов

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

Ubuntu 12.04

Установить каракатицу: простой инструмент, который реализует рефлексы на вашем компьютер, выполнив действия при запуске определенных событий. Откройте каракатицу и нажмите «Создать». Дайте ему имя и измените параметр Activated by stimulus на ON. Нажмите «Стимул», выберите категорию «Сеть» и введите «Подключиться к WLAN». Нажмите «ОК». Вы также можете выбрать SSID беспроводной сети, и у вас есть возможность проверить это при запуске. Теперь вам нужно будет указать реакцию. Перейдите на вкладку «Реакция» и нажмите «Добавить». Выберите «Приложения» из категории и «Запустить приложение» (в расширенном режиме) из типа. Теперь укажите скрипт, который вы хотите запустить в исполняемом файле. Вы даже можете передать параметры сценарию. Вот и все! Также убедитесь, что вы добавляете каракатицу в приложения для запуска. Перейдите в меню «Редактирование»> «Настройки» и включите опцию автозапуска.
25
ответ дан 25 May 2018 в 01:17
  • 1
    каракатица полностью сломана и не увидела обновления на какое-то время. Хотелось бы, чтобы это могло получить больше развития, потому что нам нужно что-то вроде Android Tasker для Linux. Никто не хочет связываться с файлами etc / network / interfaces и папками и скриптами if-up. Просто дай мне что-то, что я могу щелкнуть или включить и выключить. – Joshua Robison 19 January 2014 в 10:17

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

Интерфейсы можно найти в каталоге «/ etc / network /» в разделе имя файла «interfaces»

iface elan0 inet manual
    up filename.sh

Это добавит команду up в elan0. Simillarly дать это, с каким интерфейсом вы хотите работать. Помните о том, чтобы отступать одно пространство табуляции.

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

sudo chmod 755 filename.sh
1
ответ дан 25 May 2018 в 01:17
  • 1
    Фантастика! Работает с интерфейсами tun0 VPN, управляемыми network-manager. Ключом является использование функции inet manual. – KrisWebDev 18 June 2016 в 17:36

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

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

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

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

1
ответ дан 25 May 2018 в 01:17
  • 1
    Возможно, ваш ответ может быть немного запоздалым, поскольку OP уже принял другой ответ. Ваша помощь, конечно же, оценена, однако вам может быть лучше, сосредоточив свои усилия на неотвеченных вопросах – Wayne_Yux 24 June 2016 в 10:51

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

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

Wifi начнется после перезагрузки.

Но после некоторой борьбы, из этой ссылки, сработало, чтобы добавить скрипт к /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 остается за диспетчерским.

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

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

0
ответ дан 25 May 2018 в 01:17

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

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

Источники:

https://unix.stackexchange.com/questions/126009/cause-a-script -to-execute-after-networking-has-https://unix.stackexchange.com/questions/257888/systemd-wait-for-network-interface-to-be-up-before-running-service [!d5 ]
0
ответ дан 25 May 2018 в 01:17

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

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