Як запустити скрипт, залежно від підключення до Інтернету


48

Я часто монтую віддалений диск за допомогою sshfs. Я хотів би, щоб це кріплення було автоматично. Однак якщо я монтую його у своїх .bashrc або сценаріях запуску, монтування часто виходить з ладу, оскільки моє бездротове підключення до Інтернету ще не було зроблено.

Хтось знає про простий спосіб виконати баш-скрипт щоразу, коли з'єднання встановлено, або автоматично встановити диск SSHF?

Відповіді:


56

Додайте свій сценарій до /etc/network/if-up.d/. Назвіть свій сценарій без розширення '.sh'.

Також після додавання сценарію запустіть, chmod +x /etc/network/if-up.d/yourscriptnameщоб надати необхідний дозвіл.

Переконайтеся, що у файлі згадується мережевий інтерфейс (наприклад, wlan0 або eth0), який повинен спрацьовувати ваш сценарій при включенні /etc/network/interfaces.


12
всередині скриптів /etc/network/*.d/ви можете використовувати змінну, $IFACEщоб знати, з яким інтерфейсом відбувається з'єднання, і ви можете пропустити процедуру, якщо це, наприклад, дротовий зв’язок.
Карлос Кампдеррос

Чи є спосіб вказати для якої конкретної мережі ви хочете це зробити? коли це моя домашня мережа, я хочу робити сценарій, але коли я вийду з мережі, і про те, що я, можливо, не захочу ...
Джошуа Робісон

3
це насправді зовсім не працює. Я знаю, що мої сценарії працюють, тому що я можу запускати їх за допомогою ./ в терміналі, і вони працюють, але коли я вимикаюсь і підключаюсь до з'єднання, сценарії взагалі не викликаються. Чи є щось, що я маю зробити, щоб якось посилатися на них? випадання сценарію в if-up.d, здається, не вистачає кроку?!?!
Джошуа Робісон

1
перевірте, чи вони мають правильні дозволи.
dedunumax

2
Будь ласка, додайте, у що саме слід входити, interfacesколи його немає. Це auto wlan0і iface wlan0 inet dhcpчи що інше?
Cookie

25

Примітка редактора: каракатиця не оновлювалася з 2012 року і не є в жодному поточному сховищі Ubuntu

Ubuntu 12.04

  • Встановити каракатицю : простий інструмент, який реалізує рефлекси на вашому комп’ютері, виконуючи дії, коли спрацьовують конкретні події.
  • Відкрийте каракатицю і натисніть на New.

    Крок 1

    • Дайте ім’я та змініть параметр Активований стимулом на УВІМКНЕНО.
    • Клацніть на Стимул , виберіть категорію Мережа та введіть Підключення до WLAN . Натисніть кнопку ОК.

    Крок 2

    • Ви також можете вибрати SSID бездротової мережі і у вас є можливість перевірити це чи ні при запуску.

    Крок 3

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

    Крок 4

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

    Крок-5

    • І це все! Також переконайтеся, що ви додаєте каракатиць у запуску програм. Перейдіть до редагування> Налаштування та увімкніть опцію автоматичного запуску.

    Крок-6


6
каракатиця повністю зламана і жодного разу не бачила оновлень. Я б хотів, щоб він міг отримати більше розвитку, тому що нам потрібно щось на зразок програми Android Tasker для Linux. Ніхто не хоче возитися з т. Д. / Мережею / інтерфейсами та папками та сценаріями. Просто дайте мені щось, на що я можу натискати або вмикати або вимикати.
Джошуа Робісон

2

Я відповім на цю частину питання ОП: "Я б хотів, щоб ця установка була автоматично"

Моїм улюбленим інструментом для автоматичного керування мережевими поділками є autofs: https://help.ubuntu.com/community/Autofs

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

" autofs - це програма для автоматичного монтажу каталогів за необхідності. Автомобільні установки монтуються лише під час доступу до них і відключаються після періоду бездіяльності. Через це автоматичне управління NFS / Samba зберігає пропускну здатність і пропонує кращу пропозицію загальна продуктивність порівняно зі статичними кріпленнями через fstab. "


Ваша відповідь, поки це можливо, може бути трохи запізненою, оскільки ОП вже прийняла іншу відповідь. Ваша допомога, звичайно, вдячна, однак, можливо, вам краще послужити, зосередивши свої зусилля на питаннях без відповіді
Wayne_Yux

Вибачте Уейн, RBell отримав останній сміх тут - найкраща відповідь (про використання каракатиці) вже не актуальна, тому що цей пакет застарів - але автофайлики все ще існують, і я не бачив цього, якщо не для цієї публікації. Дякую, RBell!
KlaymenDK

1

Найкращим, простим і простим способом було б додати команду вгору до будь-якого інтерфейсу, над яким ви хочете працювати.

Інтерфейси можна знайти в каталозі "/ etc / network /" під назвою "interfaces"

iface elan0 inet manual
    up filename.sh

Це додасть команду вгору до 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

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поведінку за замовчуванням залишається за диспетчером.

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

Сподіваюся, це допомагає!


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

Удачі! Я цього не перевіряв, тому "ваш пробіг може відрізнятися".

Джерела:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.