¿Cómo puedo hacer que "rc.local" se ejecute al inicio?
75
Tengo un script que me gustaría ejecutar cuando se inicia mi sistema. Lo puse en "rc.local", pero no funciona. ¿Cómo puedo habilitarlo para que se ejecute al inicio?
¿Dónde está el comando xsetwacom? /etc/rc.local se ejecuta con una RUTA muy simple al inicio. Probablemente difiere de la RUTA en la que ha iniciado sesión en la terminal. En el terminal, escriba: type -p xsetwacom y luego reemplace el comando "xsetwacom" en /etc/rc.local con la ruta completa que devuelve "type -p". ¿Tiene que hacer inicializaciones manuales antes de que xsetwacom funcione para usted?
waltinator
3
Usando systemd como administrador de inicio, asegúrese de que se esté ejecutando la compatibilidad rc.local:systemctl status rc-local.service
rubo77
El comentario de Waltinator fue mi problema. Debido a la ruta mínima, no sabía cómo ejecutar los scripts que quería ejecutar. La ruta cargada en mi sistema Ubuntu 14.04 en el momento de ejecutar /etc/rc.local era la siguiente: / sbin: / usr / sbin: / bin: / usr / bin ... puede verificar el suyo poniendo echo $PATH > /home/rc_local_pathen su / etc / rc.local y luego verificando el archivo después de que se haya ejecutado en el inicio.
Use sudo systemctl enable rc-local.servicepara asegurarse de que /etc/rc.local se ejecute durante el inicio del servidor
William
Respuestas:
56
¿Puedes ejecutar tu script manualmente? Si no, es un problema con ese script; de lo contrario, mire más en rc.local. (Si ese script necesita ejecutarse como root, debe usar sudo para ejecutarlo manualmente).
Asegúrese de que /etc/rc.local sea ejecutable y que el script que llama también sea ejecutable.
$ ls -l /etc/rc.local-rwxr-xr-x 1 root root 4192010-08-2711:26/etc/rc.local
Asegúrese de que rc.local tenga una línea shebang (que es la predeterminada):
Sí, puedo ejecutar el script manualmente. ¿Cómo puedo asegurarme de que /etc/rc.local es ejecutable? ¿Qué tengo que escribir? ¿Es "$ ls -l /etc/rc.local -rwxr-xr-x 1"? ¡Gracias!
pedroo
@pedroo: He copiado exactamente lo que veo en mi terminal (para que veas el aviso, la entrada y la salida, todo lo anterior). El comando es "ls -l /etc/rc.local" y si es ejecutable, tendrá esas X en la salida.
3
He probado el "ls -l /etc/rc.local" y es ejecutable, pero no puedo hacer que se ejecute al inicio ... ¿Alguna idea?
pedroo
1
@pedroo: Eso necesita que se ejecute el servidor X, lo que no sucede cuando se ejecuta rc.local. Ejecutarlo desde rc.local solo lo hará salir sin hacer nada (aunque espero que ponga un mensaje en syslog o en otro lugar). En su lugar, debe colocar los comandos xsetwacom en ~ / .xinitrc o / etc / X / xinit / xinitrc.
1
@pedroo: Porque rc.local contiene comandos destinados a ejecutarse en un momento diferente. Cree un nuevo archivo, puede ponerlo en ~ / bin , marcarlo como ejecutable (chmod o propiedades en Nautilus), hacer la primera línea "#! / Bin / bash", luego colocar sus comandos en líneas posteriores.
53
En mi caso, ninguna de las instrucciones fue una solución perfecta. Si tuviste tanta mala suerte como yo, prueba esta detallada
Coloque todo su código de ejecución en un archivo de texto separado con un nombre arbitrario como foo.sh y guárdelo en un lugar arbitrario.
Añadir
#!/bin/sh
como primera línea de tu código.
Intenta ejecutar tu foo.sh por
sudo foo.sh
para verificar que no haya errores en absoluto.
Proporcione a su script /etc/rc.local la ruta completa y el nombre de su script creado después del comando sh
sh '/path/to/your/script/foo.sh'
Recuerde poner la línea de arriba antes de la última línea de código
exit 0
al final del script /etc/rc.local.
Verifique la primera línea de /etc/rc.local para ser
#!/bin/sh -e
Haga que su /etc/rc.local sea ejecutable en caso de que aún no sea ejecutable por
El Paso # 8 fue la clave, verificando que el script se ejecutará en el entorno de inicio. En mi caso, necesito dar la ruta completa al comando.
Peter Gluck
Prefecto y grandioso paso a paso, funciona en centos pero en la sudo /etc/rc.local startprimera carrera.
A1Gard
Gracias, este desglose realmente me ayudó y, como el paso 8 anterior, ¡también fue la clave para mí! Sin eso, no redirigiría +1 (como referencia, la aplicación de nodo que se ejecuta en el servidor de la nube de Bitnami se usa para siempre para la ejecución continua).
fidev
El paso 8 fue un buen consejo, pero creo que el paso 7 podría ser lo que solucionó el mío, estaba tratando de ejecutar el script usando cron para abrir un túnel, pero fallaba al azar
SeanClt
28
En las versiones más nuevas de Ubuntu systemdse usa y /etc/rc.localno se carga siempre de forma predeterminada.
Compruebe si el servicio de compatibilidad está cargado con
systemctl status rc-local.service
Si contiene activo (salido), su configuración parece estar bien y podría tener otro error en su /etc/rc.localarchivo (este podría ser un comando que falla, por ejemplo).
systemctl status rc-local.service
echo $PATH > /home/rc_local_path
en su / etc / rc.local y luego verificando el archivo después de que se haya ejecutado en el inicio.rc.local
archivo!sudo systemctl enable rc-local.service
para asegurarse de que/etc/rc.local
se ejecute durante el inicio del servidorRespuestas:
¿Puedes ejecutar tu script manualmente? Si no, es un problema con ese script; de lo contrario, mire más en rc.local. (Si ese script necesita ejecutarse como root, debe usar sudo para ejecutarlo manualmente).
Asegúrese de que /etc/rc.local sea ejecutable y que el script que llama también sea ejecutable.
Asegúrese de que rc.local tenga una línea shebang (que es la predeterminada):
fuente
En mi caso, ninguna de las instrucciones fue una solución perfecta. Si tuviste tanta mala suerte como yo, prueba esta detallada
Añadir
como primera línea de tu código.
Intenta ejecutar tu foo.sh por
para verificar que no haya errores en absoluto.
Proporcione a su script /etc/rc.local la ruta completa y el nombre de su script creado después del comando sh
Recuerde poner la línea de arriba antes de la última línea de código
al final del script /etc/rc.local.
Verifique la primera línea de /etc/rc.local para ser
Haga que su /etc/rc.local sea ejecutable en caso de que aún no sea ejecutable por
Verifique que todo funcione bien ejecutando
fuente
sudo /etc/rc.local start
primera carrera.En las versiones más nuevas de Ubuntu
systemd
se usa y/etc/rc.local
no se carga siempre de forma predeterminada.Compruebe si el servicio de compatibilidad está cargado con
Si contiene activo (salido), su configuración parece estar bien y podría tener otro error en su
/etc/rc.local
archivo (este podría ser un comando que falla, por ejemplo).fuente
2 sugerencias
¿El script de destino ejecuta un comando sudo ? Si es así, es posible que desee proporcionarle la contraseña de sudo.Culpa mía. Solo marque uno entonces. Gracias por la corrección enzotib :)
fuente
rc.local
se ejecuta como root, por lo que no se necesita contraseña.