Upstart-Skripte: Führen Sie eine Aufgabe aus, nachdem das Netzwerk hochgefahren ist

23

Ich arbeite daran, mein aktuelles Server-Setup auf neuere Hardware umzustellen und von Ubuntu Karmic Koala auf Lucid Lynx zu migrieren. Derzeit verwende ich gw6c (kompiliert von der gogo6-Website im Gegensatz zur Version aus den Repositories), um ipv6-Zugriff für meine Systeme zu erhalten. Auf dem karmischen Koala-System habe ich einfaches init.d-Skript verwendet, um den ipv6-Client zu starten

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

Ich dachte, da dies auf jedem Runlevel läuft, sollte es übersetzt werden

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

Dies funktioniert gut, angefangen von initctrl, aber es kann anscheinend nicht gestartet werden, wenn es bootet. - Sein Status ist Anhalten / Warten. Es funktioniert gut (und Respawns), wenn es anderweitig gestartet wird. Irgendwelche Ideen, wo ich falsch liege, und was wäre der geeignete Start für eine Diskussion?

BEARBEITEN: Der genaue Fehler lautet 'init: gw6c Hauptprozess (xxx) mit Status 8 beendet', gefolgt vom erneuten Öffnen des Prozesses, wobei xxx eine PID ist, die ich vermute. Ich habe auch den Verdacht, dass dies der Grund ist, warum gw6c vor dem Networking startet, und ich brauche mein eth0-up, bevor gw6c es ist

Geselle Geek
quelle

Antworten:

27

Anscheinend

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

scheint zu funktionieren

Geselle Geek
quelle
Ja, ich habe kürzlich einige geschrieben, die Net-Device-Up und Net-Device-Down verwenden und perfekt funktionieren.
Andy Shellam
Ich habe es nirgendwo in der Dokumentation gefunden. Jemand auf einer lokalen Mailingliste hat mir geholfen
Journeyman Geek
Genau das habe ich gesucht. Es ist immer noch nirgendwo in der Dokumentation der Emporkömmlinge zu finden.
Nathan
4

Platzieren Sie ein Skript, das gw6c startet, in

/etc/network/if-up.d

Alle Skripte in diesem Ordner werden ausgeführt, nachdem eine Schnittstelle aufgerufen wurde. Wenn Sie möchten, dass es nur beim Aufrufen von eth0 ausgeführt wird, bearbeiten Sie den Eintrag eth0 in

/etc/network/interfaces

und fügen Sie dem Skript einen Aufruf hinzu

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

Ich würde auch vorschlagen, Pre-Down-Skripte hinzuzufügen, um den Tunnel herunterzufahren, bevor die Schnittstelle offline geschaltet wird.

Sobald Sie dies getan haben und eine Implementierung gefunden haben, die funktioniert, veröffentlichen Sie sie hier, damit ich sie verwenden kann. Ich habe gw6c auf meinem Laptop, aber ich war bisher zu faul, um es zu automatisieren.

Haakon
quelle
Das frühere Skript, das ich gepostet habe, funktioniert ziemlich gut - obwohl ich es manuell neu starten muss, sollte sich meine Verbindung selbst zurücksetzen - dies ist für den Start gedacht, der auf lucid lynx standardmäßig eingestellt ist.
Geselle Geek
1

Danke "The Journeyman Geek" :) Du hast mir viel Zeit gespart. Ich habe mit dem Skript /etc/init.d/gw6c gekämpft, einige Timings mit "sysv-rc-conf -p" ausprobiert und mich gefragt, warum es nicht funktioniert (auch bekannt als 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

Leicht modifiziertes ("runlevel" und exec command) Skript hat den Job gemacht! :) :) :)


quelle
0

Von hier aus: 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
quelle