secuencias de comandos de inicio: ejecute una tarea después de que la red aumente

23

Estoy trabajando para mover la configuración actual de mi servidor a un hardware más nuevo y migrar de ubuntu karmic koala a lúcido lynx. Actualmente estoy usando gw6c (compilado del sitio web gogo6, en lugar de la versión de los repositorios) para obtener acceso ipv6 para mis sistemas. En el sistema koala kármico, utilicé un script init.d simple para iniciar el cliente ipv6

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

Pensé que, dado que esto se ejecuta en cualquier nivel de ejecución, debería traducirse a

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

Esto funciona bien desde initctrl, pero aparentemente no se inicia cuando se inicia. - su estado es detener / esperar. Funciona bien (y reaparece) cuando se inicia de otra manera. ¿Alguna idea sobre dónde me estoy equivocando y cuál sería el argumento apropiado para comenzar?

EDITAR: el error exacto es 'init: el proceso principal de gw6c (xxx) finalizó con el estado 8' seguido por la reaparición del proceso, con xxx siendo un PID que sospecho. También estoy medio sospechando que esto es porque gw6c comienza antes que la red, y necesito mi eth0 antes de que gw6c sea

Journeyman Geek
fuente

Respuestas:

27

Aparentemente

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

parece funcionar

Journeyman Geek
fuente
Sí, recientemente escribí algunos que usan net-device-up y net-device-down que funcionan perfectamente.
Andy Shellam
No lo encontré en ninguna parte de la documentación. alguien en una lista de correo local me ayudó
Journeyman Geek
Esto era exactamente lo que estaba buscando. Todavía no está en la documentación inicial en ningún lugar que pude encontrar.
Nathan
4

Coloque un script que comience gw6c en

/etc/network/if-up.d

Todos los scripts en esa carpeta se ejecutan después de que aparece una interfaz. Si solo desea que se ejecute cuando aparece eth0, edite la entrada eth0 en

/etc/network/interfaces

y agrega una llamada al script

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

También sugeriría agregar scripts previos al apagado para cerrar el túnel antes de que la interfaz se desconecte.

Una vez que haga eso y encuentre una implementación que funcione, publíquela aquí para que pueda usarla. Tengo gw6c en mi computadora portátil, pero hasta ahora he sido demasiado flojo para automatizarlo.

Haakon
fuente
El script anterior que publiqué funciona bastante bien, aunque necesito reiniciarlo manualmente, en caso de que mi conexión se reinicie, esto es para el arranque, que es el valor predeterminado en lúcido lúcido.
Journeyman Geek
1

Gracias "The Journeyman geek" :) Me salvaste mucho tiempo. Estaba luchando con el script /etc/init.d/gw6c, probando algunos tiempos con "sysv-rc-conf -p" y preguntándome por qué no funciona (¿también conocido como 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

¡El script ligeramente modificado ("runlevel" y el comando exec) hizo el trabajo! :) :) :)


fuente
0

Desde aquí: 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
fuente