сценарии upstart: запускать задачу после того, как работа сети возрастет

23

Я работаю над переносом моей текущей настройки сервера на более новое оборудование и перехожу с ubuntu karmic koala на lucid lynx. В настоящее время я использую gw6c (скомпилированный с веб-сайта gogo6, в отличие от версии из репозиториев), чтобы получить доступ к ipv6 для моих систем. В системе karmic koala я использовал простой скрипт init.d для запуска клиента ipv6

 #! /bin/sh
/usr/local/gw6c/bin/gw6c -f /usr/local/gw6c/bin/gw6c.conf

Я подумал, так как это работает на любом уровне выполнения, оно должно переводиться в

respawn
console none

start on startup

stop on shutdown

script
exec /usr/local/gw6c/bin/gw6c -f /usr/local/gw6c/bin/gw6c.conf
emit free6_ipv6_started
end script

это прекрасно работает с initctrl, но, очевидно, не запускается при загрузке. - его статус остановка / ожидание. Это работает хорошо (и возрождается), когда началось иначе. Есть идеи о том, где я иду не так, и каков будет подходящий аргумент «начать с»?

РЕДАКТИРОВАТЬ: точная ошибка: «init: основной процесс gw6c (xxx) завершился со статусом 8» с последующим повторным вызовом процесса, причем xxx является PID, который я подозреваю. Я также наполовину подозреваю, что это потому, что gw6c запускается раньше, чем сеть, и мне нужно, чтобы мой eth0 был запущен до того, как

Подмастерье
источник

Ответы:

27

По всей видимости

respawn
console none

start on (local-filesystems and net-device-up IFACE!=lo)
stop on [!12345]

script
chdir /usr/local/gw6c/bin/

exec /usr/local/gw6c/bin/gw6c 
end script

похоже на работу

Подмастерье
источник
Да, я только недавно написал несколько, которые используют net-device-up и net-device-down, которые работают отлично.
Энди Шеллам
я не нашел это нигде в документации. кто-то из местного списка рассылки помог мне
Journeyman Geek
Это было именно то, что я искал. Это все еще не в документации выскочки где-нибудь, что я мог найти.
Натан
4

Поместите скрипт, начинающий gw6c в

/etc/network/if-up.d

Все скрипты в этой папке запускаются после запуска интерфейса. Если вы хотите, чтобы он запускался только при появлении eth0, отредактируйте запись eth0 в

/etc/network/interfaces

и добавить вызов в сценарий

iface eth0 inet dhcp
  up /etc/init.d/gw6c restart

Я бы также предложил добавить сценарии pre-down для отключения туннеля до того, как интерфейс переходит в автономный режим.

Как только вы это сделаете и найдете реализацию, которая работает, опубликуйте ее здесь, чтобы я мог ее использовать. У меня на ноутбуке есть gw6c, но мне пока лень его автоматизировать.

Хокон
источник
Предыдущий скрипт, который я опубликовал, работает довольно хорошо - хотя мне нужно вручную перезапустить его, если само мое соединение перезапустится - это для upstart, что по умолчанию для lucid lynx.
подмастерье Компьютерщик
1

Спасибо тебе, "The Journeyman geek" :) Ты сэкономил мне много времени. Я боролся со скриптом /etc/init.d/gw6c, пробовал некоторые моменты времени с "sysv-rc-conf -p" и удивлялся, почему он не работает (он же WTF?).

respawn
console none

start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [!12345]

script

exec /etc/init.d/gw6c start
end script

Слегка измененный скрипт (runlevel и exec command) сделал свою работу! :) :) :)


источник