¿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?

pedroo
fuente
1
¿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.
RaisinBranCrunch
¡Tenga en cuenta que si su script necesita ejecutarse continuamente , debe iniciarlo como un demonio en el rc.localarchivo!
totymedli
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 419 2010-08-27 11:26 /etc/rc.local

Asegúrese de que rc.local tenga una línea shebang (que es la predeterminada):

$ head -n1 /etc/rc.local
#!/bin/sh -e

fuente
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

  1. 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.
  2. Añadir

    #!/bin/sh

    como primera línea de tu código.

  3. Intenta ejecutar tu foo.sh por

    sudo foo.sh

    para verificar que no haya errores en absoluto.

  4. 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'
  5. 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.

  6. Verifique la primera línea de /etc/rc.local para ser

    #!/bin/sh -e
  7. Haga que su /etc/rc.local sea ejecutable en caso de que aún no sea ejecutable por

    sudo chown root /etc/rc.local
    sudo chmod 755 /etc/rc.local
  8. Verifique que todo funcione bien ejecutando

    sudo /etc/init.d/rc.local start
  9. Pruebe reiniciar su sistema.
shvahabi
fuente
66
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

captura de pantalla

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).

rubo77
fuente
44
si rc-local.service no está activado, consulte esta publicación que explica cómo habilitar /etc/rc.local con Systemd
yaitloutou
3

2 sugerencias

  1. Asegúrese de que el archivo de script de destino también esté marcado como ejecutable.
  2. ¿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 :)

Ankit
fuente
8
rc.localse ejecuta como root, por lo que no se necesita contraseña.
enzotib