2 votos

el código bash en rc.local no se ejecuta tras el arranque

¿Alguien sabe por qué un sistema no ejecuta el código script dentro de rc.local al arrancar? Tengo un bash script posterior a la configuración que quiero ejecutar después de la instalación inicial de VMware ESX (Red Hat), y por alguna razón parece que no se ejecuta. Tengo la configuración para registrar su inicio de ejecución e incluso su progreso para poder ver hasta dónde llega en caso de que falle en algún momento, pero incluso cuando miro ese registro, estoy encontrando que ni siquiera comenzó la ejecución del código script. Ya he comprobado que script tiene permisos de ejecución (755), ¿qué más debería mirar?

Aquí están las primeras líneas de mi código:

#!/bin/sh
echo >> /tmp/configLog ""
echo >> /tmp/configLog "Entering maintenance mode"

4voto

Justin Ellison Puntos 614

Entonces, ¿existe /tmp/configLog? Si es así, tu script está disparando, y simplemente está muriendo en algún lugar.

Empieza por lo básico:

  1. Ponga una simple línea en /etc/rc.local, así. touch /tmp/itworked¿Funcionó? Después de reiniciar, ¿existe /tmp/itworked? Si es así, entonces rc.local se está ejecutando.
  2. Otro problema común es que si su script es un demonio necesita manejar la bifurcación en el fondo, o necesita estar en el fondo en rc.local. Si su script es /bin/myscript, entonces rc.local debería tener: /bin/myscript &en él. ¿Tarda mucho en ejecutarse? Puede haber un tiempo de espera en alguna parte de los init scripts para evitar que los usuarios detengan el proceso de arranque - poner el proceso en segundo plano le permitirá evitarlo si existe.
  3. Si el "toque" funciona, y está en segundo plano, tiene que estar en su script en alguna parte. ¿Qué hace cuando ejecutas /bin/sh /etc/rc.localdesde la línea de comandos?
  4. Como dijo Jason, comprueba dmesg, así como /var/log/messages para ver si hay alguna pista.
  5. Cuando el script se ejecuta desde rc.local, no tendrá el conjunto completo de variables de entorno que tiene su usuario root cuando está conectado - por ejemplo, $PATH puede ser diferente. No confíe en $PATH. También puede probar su script programando un trabajo 'at' que se acercará a la simulación del entorno.

1voto

Adam Wuerl Puntos 528

No estoy seguro de si el procesamiento de los scripts init en linux es secuencial o paralelo, pero los sistemas Solaris lanzan los scripts secuencialmente. Si un init scriptsscriptscripts anterior aún no ha terminado (lo veo a veces debido a la dependencia de sendmail/DNS) los posteriores no se lanzan tan rápidamente como se supone.

Utiliza ps para ver si un init script anterior sigue ejecutándose.

1voto

Alotor Puntos 3438

No es algo simple como un error tipográfico, ¿verdad? Debería ser esto:

#!/bin/hash

Realmente lo es:

#!/bin/bash

?

(Como dijo CK en el comentario, ahora que me fijo)

1voto

Soldarnal Puntos 2646

¿Está seguro de que su sistema soporta rc.local? Si no está documentado, tendrá que seguir todos los init scripts. Comienza en /etc/inittab. (Es posible que desde allí vayas a /etc/rc.d/rc)

En algunos sistemas, /etc/rc.d/rc.local se soporta a través de un enlace simbólico /etc/rc.d/rcX.d/S99local. (donde X es el nivel de ejecución apropiado).

Si está usando RedHat, no hay ninguna razón real para no crear su propio init script, añadirlo a /etc/rc.d/init.d, chkconfig --add el script, y chkconfig en el script. Esto hará los enlaces simbólicos correctos en los directorios /etc/rc.d/rcX.d, y hace que los init sean fáciles de desplegar o deshabilitar.

Utilizar el obsoleto rc.local está bien para un hack rápido si tu sistema lo soporta, pero no es realmente apropiado para algo importante o permanente.

0voto

Dave K Puntos 2198

Quizás haya un error de sintaxis en el rc.local script. Si intentas ejecutarlo manualmente desde la línea de comandos después de que el sistema haya arrancado, ¿se ejecuta correctamente?

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: