Skrypty upstart: uruchom zadanie po uruchomieniu sieci

23

Pracuję nad przeniesieniem bieżącej konfiguracji serwera na nowszy sprzęt i przeprowadzeniem migracji z karmicznej koali Ubuntu do świadomego rysia. Obecnie używam gw6c (skompilowanego ze strony internetowej gogo6, w przeciwieństwie do wersji z repozytoriów), aby uzyskać dostęp ipv6 dla moich systemów. W systemie karmicznej koali użyłem prostego skryptu init.d, aby uruchomić klienta ipv6

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

Pomyślałem, że ponieważ działa to na dowolnym poziomie działania, powinno to zostać przetłumaczone

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

działa to dobrze rozpoczęte od initctrl, ale najwyraźniej nie uruchamia się po uruchomieniu. - jego status jest zatrzymany / czeka. Działa dobrze (i odradza się), gdy zaczyna się inaczej. Jakieś pomysły na to, gdzie popełniam błąd i jaki byłby odpowiedni argument na początku?

EDYCJA: dokładny błąd to „init: gw6c główny proces (xxx) zakończył się statusem 8”, po którym następuje odrodzenie procesu, przy czym xxx jest PID i podejrzewam. Podejrzewam też, że jest to spowodowane tym, że gw6c uruchamia się przed rozpoczęciem pracy w sieci i potrzebuję mojego eth0, zanim gw6c zostanie

Journeyman Geek
źródło

Odpowiedzi:

27

Widocznie

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

wydaje się działać

Journeyman Geek
źródło
Tak, niedawno napisałem kilka, które używają net-device-up i net-device-down, które działają idealnie.
Andy Shellam
nie znalazłem go nigdzie w dokumentacji. pomógł mi ktoś z lokalnej listy mailingowej
Journeyman Geek
Właśnie tego szukałem. Nigdzie nie mogę go znaleźć w dokumentacji wstępnej.
Nathan
4

Umieść skrypt rozpoczynający gw6c w

/etc/network/if-up.d

Wszystkie skrypty w tym folderze uruchamiane są po uruchomieniu interfejsu. Jeśli chcesz, aby działał tylko, gdy pojawi się eth0, edytuj wpis eth0 w

/etc/network/interfaces

i dodaj wywołanie do skryptu

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

Sugerowałbym również dodanie skryptów wstępnego wyłączenia, aby zamknąć tunel, zanim interfejs przejdzie w tryb offline.

Gdy to zrobisz i znajdziesz implementację, która działa, opublikuj ją tutaj, aby móc jej użyć. Mam gw6c na swoim laptopie, ale do tej pory byłem zbyt leniwy, aby go zautomatyzować.

Haakon
źródło
Poprzedni skrypt, który opublikowałem, działa całkiem nieźle - chociaż muszę go ręcznie zrestartować, jeśli moje połączenie zresetuje się samo - to jest na początek, co jest domyślne w lucid lynx.
Journeyman Geek
1

Dziękuję „The Geek Journeyman” :) Zaoszczędziłeś mi dużo czasu. Walczyłem ze skryptem /etc/init.d/gw6c, próbując mierzyć czas z „sysv-rc-conf -p” i zastanawiałem się, dlaczego to nie działa (inaczej 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

Lekko zmodyfikowany skrypt („poziom pracy” i komenda exec) wykonał zadanie! :) :) :)


źródło
0

Stąd: http://upstart.ubuntu.com/cookbook/#single-job-instance-running-without-pid

description     "Uncomplicated firewall"

# Make sure we start before an interface receives traffic
start on (starting network-interface
          or starting network-manager
          or starting networking)

stop on runlevel [!023456]

console output

pre-start exec /lib/ufw/ufw-init start quiet
post-stop exec /lib/ufw/ufw-init stop
Matt Sweeney
źródło