Я пытаюсь запустить выскочку после того, как убедитесь, что сетевые интерфейсы вставлены.
Это то, что у меня есть сейчас:
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
Проблема в том, что dibbler явно началось слишком скоро, так как я получаю Client Critical Interface eth0/2 is down or doesn't have any link-local address.. Есть ли простой способ решить это с помощью событий или мне нужно будет сделать это в pre-start? Я использую только / etc / networking / interfaces и сетевой скрипт для настройки. Поэтому нет сетевого менеджера.
Ваше задание запускается при появлении интерфейса, но оно еще не настроено. Это задание содержит 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
Возможно, вам понадобится следующий запуск:
start on net-device-up IFACE=eth0 ADDRFAM=inet6
, альтернативно, вы можете использовать static-network-up для ожидания всех интерфейсов.