?>/script>'; } ?> Script en /etc/rc.local no va. Manualmente sí. Widgets Magazine

Autor Tema: Script en /etc/rc.local no va. Manualmente sí.  (Leído 6685 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado peperfus

  • ******
  • Mensajes: 251
Script en /etc/rc.local no va. Manualmente sí.
« en: 21-03-2019, 11:49 (Jueves) »
Hola

Quiero que se ejecute un script cada vez que enciende el router y por eso lo puse en el archivo /etc/rc.local
Sin embargo, al reiniciar el router, el script no funciona.

Los permisos de ejecución son correctos.
Todas las rutas especificadas en el script son absolutas.

El script lo que hace es activar la wifi de otro router, mediante la orden:
ssh otrorouter wifi up ..... (o algo similar, ahora no recuerdo la sintaxis exacta)

El caso es que si lo ejecuto manualmente desde consola, funciona perfecto. Sólo falla si lo pongo en el rc.local.
¿Alguna idea de qué puede estar pasando?
Gracias.

Edito: por lo visto, el script sí que se ejecuta desde rc.local. Lo que está fallando es la orden ssh otrorouter....
Este es el contenido del script.
Código: [Seleccionar]
#!/bin/sh

echo ENCENDIENDO TODAS LAS WIFIS DE CASA

rm /root/WIFI_OFF
touch /root/WIFI_ON

for router in bosque.lan salon.lan oficina.lan
do
  ssh $router "wifi up"
done

El router que ejecuta tiene "permiso" (autenticación por clave pública y privada) de login directo a los otros routers, sin necesidad de password.
Y en su archivo hosts están las IPs correspondientes de los otros routers también.
Se me ocurre que mientras se está ejecutando el script, aún no haya arrancado la red, o algo así ????
Pero tampoco, porque le he puesto un sleep de bastante tiempo para que se espere antes de ejecutar el bucle y tampoco va.
« Última modificación: 21-03-2019, 12:04 (Jueves) por peperfus »

crash

  • Visitante
Re:Script en /etc/rc.local no va. Manualmente sí.
« Respuesta #1 en: 21-03-2019, 15:18 (Jueves) »
¿has probado a ponerle ; al bucle for?
Código: [Seleccionar]
for router in bosque.lan salon.lan oficina.lan ;do
  ssh $router "wifi up"
done
y otra cosa lo de
Código: [Seleccionar]
"wifi up" ¿es algún tipo de archivo o es un mensaje?
« Última modificación: 21-03-2019, 15:29 (Jueves) por crash »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re:Script en /etc/rc.local no va. Manualmente sí.
« Respuesta #2 en: 21-03-2019, 16:33 (Jueves) »
Prueba a guardarlo en un archivo aparte, y luego desde rc.local lo llamas con el ampersand al final:

Código: [Seleccionar]
script.sh &

Desconectado peperfus

  • ******
  • Mensajes: 251
Re:Script en /etc/rc.local no va. Manualmente sí.
« Respuesta #3 en: 21-03-2019, 23:13 (Jueves) »
Gracias por las respuestas.

El rc.local sí que ejecuta el script, aún sin el &.
Lo que está fallando es la parte del bucle for. No lo hace.
¿Hay alguna manera de que guarde un log de error o algo así?

He probado a poner directamente las ips de los routers, por si al dns se le pegan las sábanas al arrancar el router, pero tampoco.
Esto es lo que está fallando:
Código: [Seleccionar]
for router in 249 251 252
do
  ssh 192.168.0.$router "wifi up"
done

(También he probado a ejecutarlo como dices, Tki2000, con el & al final en el rc.local y no ha cambiado nada)

Qué misterio. Manualmente funciona perfecto: entra en cada router y activa su wifi. Pero al ejecutarlo desde rc.local, nada: las wifis siguen desactivadas.
Me intriga saber el motivo.
« Última modificación: 21-03-2019, 23:13 (Jueves) por peperfus »

Desconectado peperfus

  • ******
  • Mensajes: 251
Re:Script en /etc/rc.local no va. Manualmente sí.
« Respuesta #4 en: 21-03-2019, 23:22 (Jueves) »
Eureka !

Creo que ya sé lo que está pasando.
Gracias a este truquito, explicado en esta página:
https://stackoverflow.com/questions/7783341/run-script-with-rc-local-script-works-but-not-at-boot
Que explica cómo guardar un log de errores del rc.local...., haciéndolo de esta manera:
Código: [Seleccionar]
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exec 2> /tmp/rc.local.log  # send stderr from rc.local to a log file
exec 1>&2                      # send stdout to the same log file
set -x                         # tell sh to display commands before execution

/opt/stuff/somefancy.error.script.sh

exit 0

He visto que el archivo log tiene esto:
Código: [Seleccionar]
echo ENCENDIENDO TODAS LAS WIFIS DE CASA
ENCENDIENDO TODAS LAS WIFIS DE CASA

rm /root/WIFI_OFF
rm: can't remove '/root/WIFI_OFF': No such file or directory
touch /root/WIFI_ON

#for router in bosque.lan salon.lan oficina.lan
for router in 249 251 252
do
  ssh 192.168.0.$router "wifi up"
done

Host '192.168.0.249' is not in the trusted hosts file.
(ssh-rsa fingerprint sha1!! ....................)
Do you want to continue connecting? (y/n)
ssh: Connection to root@192.168.0.249:22 exited: Didn't validate host key

Host '192.168.0.251' is not in the trusted hosts file.
(ssh-rsa fingerprint sha1!! .................)
Do you want to continue connecting? (y/n)
ssh: Connection to root@192.168.0.251:22 exited: Didn't validate host key

Host '192.168.0.252' is not in the trusted hosts file.
(ssh-rsa fingerprint sha1!! ..................)
Do you want to continue connecting? (y/n)
ssh: Connection to root@192.168.0.252:22 exited: Didn't validate host key

Así que supongo que el usuario que ejecuta el script no tiene los routes en su "known_hosts". Ahora a mirar cómo los añado.

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re:Script en /etc/rc.local no va. Manualmente sí.
« Respuesta #5 en: 21-03-2019, 23:37 (Jueves) »
Por aquí he pillado esto: https://forum.dd-wrt.com/phpBB2/viewtopic.php?p=537122
Es para dd-wrt, pero ha encontrado una solución. Mira a ver si te funciona.

Desconectado peperfus

  • ******
  • Mensajes: 251
Re:Script en /etc/rc.local no va. Manualmente sí.
« Respuesta #6 en: 21-03-2019, 23:45 (Jueves) »
De momento estoy probando el parámetro -y del ssh, que fuerza la conexión aún con hosts desconocidos.
Lo que no entiendo es por qué el rc.local no mira en el archivo known_hosts.  ???
informo en 0,

ups, no había leído tu último post. Ahora le echaré un vistazo....
De momento parece ser que también me falla la resolución dns, así que vuelvo a poner las IPs de los routers.....

Vuelvo luego con resultados.
« Última modificación: 21-03-2019, 23:47 (Jueves) por peperfus »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re:Script en /etc/rc.local no va. Manualmente sí.
« Respuesta #7 en: 21-03-2019, 23:48 (Jueves) »
Mira esto también, por si hay problemas con lo anterior. Básicamente es lo mismo, pero forzando la variable HOME

https://www.linksysinfo.org/index.php?threads/scp-wont-run-in-startup-script.68197/

Por lo que he visto por ahí, la opción -y de ssh tenía un bug, y no funcionaba. Desconozco si se ha arreglado.

Más de lo mismo: https://superuser.com/questions/946929/dropbear-dbclient-scp-equivalent-to-openssh-ostricthostkeychecking
« Última modificación: 21-03-2019, 23:53 (Jueves) por Tki2000 »

Desconectado peperfus

  • ******
  • Mensajes: 251
Re:Script en /etc/rc.local no va. Manualmente sí.
« Respuesta #8 en: 22-03-2019, 00:08 (Viernes) »
Con la opción -y rula.

Y con la opción de la variable HOME .... RULA  ;D

Gracias Tki2000, eres mi héroe  ;D

 La clave ha sido añadir al principio de rc.local:

export HOME=/root

(También habia probado sin el export, pero no funcionaba)
« Última modificación: 22-03-2019, 00:11 (Viernes) por peperfus »