Tengo un servicio que instalo así:
install -m 755 init_script /etc/init.d/spacenavd
cd /etc/rc2.d
ln -s ../init.d/spacenavd S99spacenavd
lo que hace init_script es iniciar el script:
/usr/local/bin/spacenavd -v
Todo esto funciona bien y permite que el servicio se inicie automáticamente al inicio. Sin embargo, tengo problemas para ejecutar otro script al inicio que utiliza el servicio spacenavd. Este script funciona normalmente cuando lo ejecuto manualmente después de iniciar sesión. Sin embargo, ejecutarlo al inicio no funciona cuando lo coloco en rc.local.
Hago lo siguiente en rc.local:
cd /home/filedirec
sudo ./my_script &
Esto funciona a veces y otras no. Parece que no puedo determinar cuál es la causa. ¿Cuál es una buena manera de solucionar problemas?
Respuesta1
Deja Vu.
Sudo es un programa interactivo que requiere que usted proporcione una contraseña para poder ejecutar un comando como root (u otro usuario) si no ha ingresado sus credenciales recientemente. Elrc.localEl script no está adjunto a su consola, por lo que nunca lo verá solicitando la contraseña.
Elrc.localEl script también ya se está ejecutando como root, por lo que debes eliminar elsudocomando de él.
Mejor aún sería simplemente reemplazar todo lo que agregaste con:/home/filedirec/mi_script(o/home/filedirec/mi_script &si es necesario). Usar la ruta absoluta hará que sea más rápido y más fácil ver exactamente cuál es elrc.localel guión está funcionando si es necesario revisarlo más adelante,cdy similares generalmente se adaptan mejor a los shells interactivos.
Respuesta2
Una cosa que puedes hacer es iniciar tu script de forma separada.pantallasesión.
Por ejemplo, su archivo rc.local podría verse así:
/usr/bin/screen -dmS my_script bash -c '/home/filedirec/my_script'
Luego podrá "volver a conectar" fácilmente la pantalla después del inicio y ver qué sucede con su secuencia de comandos. También es posible registrar la salida en un archivo.
Si el comando de pantalla no está disponible en su sistema:sudo apt-get install screen
Un tutorial con imágenes: pantalla: Mantenga sus procesos en ejecución a pesar de una conexión interrumpida