Aquí está el contenido de /etc/network/interfaces
:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
post-up /etc/network/if-up.d/sshstart
Y sshstart
es un script con lo siguiente:
curl something something darkside send a file over ftps in the background &
/usr/bin/autossh -M 0 -f -N -o ServerAliveInterval=15 -o ServerAliveCountMax=3 -R 127.0.0.1:2005:127.0.0.1:22 -R 192.168.1.10:2006:192.168.2.110:1912 -L 127.0.0.1:5249:192.168.1.212:5249 [email protected] -p 8080
Cuando la máquina se reinicia, el curl
comando se ejecuta varias veces, el archivo termina 2 o 3 veces en el servidor ftp y cuando miro los procesos parece que hay varias instancias de autossh ejecutándose ... No estoy seguro de si así es como autossh hace cosas o no, pero seguramente curl no debería cargar el archivo varias veces.
Mi presentimiento es que todo el sshstart
script se ejecuta varias veces, pero no entiendo por qué.
Intenté buscar detalles sobre el proceso de configuración de la red en el arranque, pero todo lo que pude encontrar fue información de sintaxis para el archivo de interfaces.
¿Puede alguien ayudar, por favor?
Gracias.
--- Editar ---
Como se sugiere a continuación, modifiqué mi archivo de interfaz de la siguiente manera (eliminé las líneas vacías que aparecen arriba de la publicación):
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
post-up /etc/network/if-up.d/sshstart
Y agregó la siguiente línea a sshstart:
echo $(date)>>/run/shm/sshstart.log
Aquí está el contenido de /run/shm/sshstart.log
después de un reinicio:
Wed Oct 29 08:07:00 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Así que se ejecutó 4 veces :( ¿qué está pasando?
echo $(date)
es un poco incómodo e indirecto. También podría deletrear eso comodate
. Similar al Premio de Uso Inútil del Gato .Respuestas:
Los archivos
/etc/network/if-up.d
ya se ejecutan automáticamente cada vez que aparece una interfaz (cualquier interfaz). Cuando especifica el mismo script para ejecutar nuevamente en unpost-up
comando explícito , solo hace que el script se ejecute nuevamente. Entonces, supongo que esto es lo que debería suceder:lo
aparece (con variable de entornoIFACE=lo
) debido a que se encuentra en/etc/network/if-up.d
.eth0
aparece (con variable de entornoIFACE=eth0
) por la misma razón.eth0
aparece (con la variable de entorno sinIFACE
configurar) porque lo solicitó en unapost-up
directiva.No estoy seguro de dónde viene la cuarta vez, pero de todos modos ya son tres.
Debe ubicar el script en otro lugar y ejecutarlo una vez usando una
post-up
directiva, o dejarlo donde está pero no mencionarlo en unapost-up
directiva y verificar el valor de$IFACE
para que no haga nada a menos que la interfaz deseada (eth0
) haya llegado arriba.fuente
--all
. Parece que hay una característica para ejecutar lasif-up.d
secuencias de comandos por última vez con este argumento para indicar que todas las interfaces están ahora activas, en caso de que alguna secuencia de comandos quiera realizar una acción una vez que se sepa que no hay más interfaces pendientes. Eso explica la cuarta vez.Como dijo Celada, los
/etc/network/if-up.d
scripts se ejecutan para cada interfaz. Para evitar la duplicación de reglas, simplemente agregue:en la parte superior de tu guión. Esto hará que el script salga inmediatamente si la interfaz no es la deseada.
fuente
Elimine la línea vacía antes del
post-up
comando. Esto debería relacionar elpost-up
comandoeth0
únicamente. Además, mueva su script fuera de laif-up.d
carpeta. Las secuencias de comandos en esa carpeta se ejecutan automáticamente, sin importar si se definen comopost-up
. En su caso, se ejecutará adicionalmente a supost-up
comando.fuente