Как запустить скрипт ТОЛЬКО когда срабатывает триггер на проводном и Wi-Fi?

Вопрос или проблема

Я читал много примеров в интернете. Я разместил скрипт

/etc/NetworkManager/dispatcher.d
/etc/NetworkManager/dispatcher.d/pre-up.d

но скрипт не работает так, как мне нужно.

Я хочу, чтобы скрипт запускался в моей ОС Debian только когда активируется и подключается проводное соединение и Wi-Fi соединение. Я не хочу, чтобы скрипт запускался при старте NetworkManager.service.

Все остальные скрипты в интернете запускаются при старте NetworkManager.service.

Как это сделать?

Ответ или решение

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

Шаг 1: Создание скрипта

Первым делом необходимо создать ваш скрипт. Убедитесь, что вы создали файл в соответствующей директории. В примере ниже мы создадим скрипт под названием my-script.sh.

  1. Откройте терминал и создайте новый скрипт:

    sudo nano /etc/NetworkManager/dispatcher.d/my-script.sh
  2. Вставьте следующий код, настраивая его под ваши нужды:

    #!/bin/bash
    
    # Получаем статус изменения (up/down) и имя интерфейса
    IFACE=$1
    ACTION=$2
    
    # Проверяем, является ли действие "up" и имя интерфейса проводным или беспроводным
    if [ "$ACTION" == "up" ] && { [ "$IFACE" == "eth0" ] || [ "$IFACE" == "wlan0" ]; }; then
       # Здесь помещается ваш код, который вы хотите выполнить.
       echo "Сеть $IFACE активирован. Выполнение скрипта."
       # Например, запускаем команду или другую программу
    fi

Шаг 2: Делаем скрипт исполняемым

После создания скрипта необходимо сделать его исполняемым:

sudo chmod +x /etc/NetworkManager/dispatcher.d/my-script.sh

Шаг 3: Настройка вызова скрипта

Скрипт, который мы создали, будет автоматически вызываться NetworkManager при каждом изменении состояния сетевых интерфейсов. Однако, чтобы гарантировать, что он не будет вызываться на старте службы NetworkManager, нужно ввести дополнительную проверку.

В части кода, где мы проверяем состояние интерфейса, мы также можем добавить условие для проверки состояния NetworkManager. Это можно сделать, например, с помощью временной метки или другого механизма.

Шаг 4: Проверка конфигурации

Убедитесь, что у вас настроены имена интерфейсов. В приведённом примере используются eth0 для проводного подключения и wlan0 для беспроводного. Чтобы узнать правильные имена интерфейсов на вашем устройстве, вы можете использовать команду:

ip link show

Шаг 5: Тестирование

После завершения вышеуказанных шагов перезапустите NetworkManager, чтобы ваши изменения вступили в силу:

sudo systemctl restart NetworkManager

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

Заключение

Следуя представленным инструкциям, вы сможете настроить выполнение вашего скрипта только в случае подключения к проводной сети и Wi-Fi, избегая запуска при старте NetworkManager. Это позволит вам точно контролировать выполнение своих задач на системе Debian, обеспечивая стабильность и предсказуемость поведения скрипта.

Оцените материал
Добавить комментарий

Капча загружается...