«Клиентский критический интерфейс eth0 / 2 не работает или не имеет локального адреса» во время запуска службы после запуска сети

Я пытаюсь начать работу после запуска, убедившись, что сетевые интерфейсы работают.

Это то, что у меня есть сейчас:

start on started network-interface INTERFACE=eth0
stop on runlevel [!2345]

pre-start script
    test -x /usr/sbin/dibbler-client || { stop; exit 0; }
    test -c /dev/null || { stop; exit 0; }

end script

exec /usr/sbin/dibbler-client start 2>&1 > /dev/null

Проблема в том, что Дибблер, очевидно, запущен слишком рано, так как я получаю Client Critical Interface eth0/2 is down or doesn't have any link-local address. Есть ли простой способ решить это с помощью событий или я? Должен ли я сделать это в pre-start? Я использую только / etc / network / interfaces и сетевой скрипт для настройки. Так что нет сетевого менеджера.

3
задан 7 November 2014 в 18:09

3 ответа

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

я думаю, что самый чистый путь был бы сценарий диспетчера для NetworkManager.

Создают файл в /etc/NetworkManager/dispatcher.d/ со следующим содержанием:

#!/bin/bash
# NetworkManager sets those parameters
INTERFACE=$1
ACTION=$2

if [ "$INTERFACE" == "eth0" ] && [ "$ACTION" == "up" ]; then
  # some tests before starting...
  /usr/sbin/dibbler-client start 2>&1 > /dev/null
elif [ "$INTERFACE" == "eth0" ] && [ "$ACTION" == "down" ]; then
  # maybe stop the client...
fi
0
ответ дан 7 November 2014 в 18:09

Основная проблема состояла в том, что ipv6 не был запущен даже при том, что интерфейс произошел.

Выполнение некоторого просмотра было предложение для запуска ipv6 модуля прямо во время начальной загрузки путем редактирования /etc/modules.

Другое решение состоит в том, чтобы, предположительно, включить inactive-mode в dibbler конфигурации /etc/dibbler/client.conf

, я хотел сделать это просто в новомодном сценарии, таким образом, вот .conf файл, который я протестировал и, кажется, работаю:

# dibbler-client
#
# The dibbler dhcpv6 client

description     "dibbler-client"

start on (started network-interface
          or started network-manager
          or started networking)
stop on runlevel [!2345]

pre-start script
    test -x /usr/sbin/dibbler-client || { stop; exit 0; }
    test -c /dev/null || { stop; exit 0; }

    TIMEOUT=50 #5 second timeout - eatch iteration sleeps for 1/10th of a second
    LOG_FILE=/tmp/dibbler_upstart.log

    until [ $TIMEOUT -eq 0 ]; do
        if ip addr show dev eth0 | grep -e 'inet6.*link. 

, Если кто-то знает, как обнаружить ipv6 состояние с событиями, которые были бы более чистым решением.

; then echo "Detected inet6 link-local, exiting" >> $LOG_FILE ip addr show dev eth0 >> $LOG_FILE exit 0; fi TIMEOUT=$((TIMEOUT-1)) sleep .1 done echo "Timeout waiting for IP address" >> $LOG_FILE exit 1; end script exec /usr/sbin/dibbler-client start 2>&1 > /dev/null

, Если кто-то знает, как обнаружить ipv6 состояние с событиями, которые были бы более чистым решением.

0
ответ дан 7 November 2014 в 18:09

Возможно, Вам нужно следующее, запускаются на:

start on net-device-up IFACE=eth0 ADDRFAM=inet6

альтернативно, можно использовать static-network-up для ожидания всех интерфейсов, чтобы произойти.

0
ответ дан 7 November 2014 в 18:09

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

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