2

Я хотел бы запустить сетевой скрипт при вызове определенного интерфейса (например, eth0), вызвав

ifup eth0

Скрипт должен запускаться ТОЛЬКО при вызове eth0. Мой подход заключался в том, чтобы написать скрипт (с именем script.sh), поместить его где-нибудь как исполняемый файл, а затем записать в /etc/network/interfaces:

auto eth0
iface eth0 inet manual
up /path/to/script.sh

Есть ли более элегантный способ сделать это? Могу ли я каким-то образом использовать среду сценариев /etc/network/if-up.d ? Насколько я знаю, все скрипты в этой папке будут запускаться независимо от того, какой интерфейс был задействован.

1 ответ1

4

Когда скрипты в ifup.d вызываются, ему передается огромный выбор переменных среды, связанных с конфигурацией конкретного интерфейса. Так, например, если ваша конфигурация интерфейса выглядела так.

iface eth0 inet manual
  dofoo on

Тогда ваш скрипт получит переменную типа $IF_DOFOO со значением on .

Зная, что вы можете поместить что-то в начало вашего скрипта, как

#!/bin/bash

if [ -z "$IF_DOFOO" ] ; then
    # this script only applies to interface flagged as dofoo
    exit 0
fi
... Doing the foo.

Имея это в виду, этот скрипт можно легко поместить в if-up.d.

Конечно, вы также можете просто посмотреть на значение $IFACE и жестко закодировать ваш скрипт, чтобы он выполнялся только для определенного интерфейса, или сопоставить его с другим внешним источником конфигурации. Посмотрите на другие скрипты в if-up.d чтобы найти примеры того, что вы можете сделать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .