Guía para configurar un script en rc.local para que se ejecute en el inicio en Linux

Artículos Guías Manuales Sistemas Linux Windows Binario 0

En algunos sistemas basados en Linux, es posible configurar scripts personalizados para que se ejecuten durante el inicio del sistema utilizando el archivo rc.local. A continuación se detallan los pasos para lograrlo:

1. Comprobar si existe rc.local

En distribuciones más recientes, como las basadas en systemd (Ubuntu 16.04+ y otras), el archivo rc.local puede no estar habilitado por defecto.

Para verificar si rc.local existe, puedes ejecutar:

ls /etc/rc.local

Si el archivo existe, el comando anterior te mostrará la ruta del archivo. Si no existe, puedes crearlo.

2. Crear o habilitar el archivo rc.local

Si el archivo no existe o está deshabilitado, puedes crearlo y asegurarte de que tenga los permisos correctos.

  1. Crea el archivo rc.local:

    sudo nano /etc/rc.local
  2. Añade el siguiente contenido básico al archivo si está vacío. Esto incluye el shebang (#!/bin/sh) que indica el intérprete de comandos:

    #!/bin/sh -e
    # rc.local
    # Este script se ejecutará después de que el sistema haya terminado de iniciar.

    # Añade aquí tus comandos o scripts

    exit 0
  3. Haz el archivo ejecutable:

    sudo chmod +x /etc/rc.local

3. Ejecutar un script desde rc.local

Puedes añadir cualquier comando o script que desees ejecutar al inicio del sistema antes de la línea exit 0. Por ejemplo, si tienes un script llamado mi_script.sh en /home/usuario/, puedes agregar la ruta completa del script en el archivo rc.local.

Ejemplo:

Supongamos que queremos ejecutar el script /home/usuario/mi_script.sh al iniciar el sistema:

  1. Edita el archivo rc.local:

    sudo nano /etc/rc.local
  2. Añade la ruta del script antes de la línea exit 0:

    #!/bin/sh -e
    # rc.local

    # Ejecuta el script personalizado
    /home/usuario/mi_script.sh
    exit 0

Asegúrate de que tu script mi_script.sh también sea ejecutable:

sudo chmod +x /home/usuario/mi_script.sh

4. Habilitar rc-local.service (para sistemas con systemd)

Si tu sistema usa systemd, es posible que necesites habilitar el servicio rc-local manualmente. Aquí te muestro cómo hacerlo:

  1. Crea el archivo de servicio:

    sudo nano /etc/systemd/system/rc-local.service
  2. Añade el siguiente contenido para crear un servicio compatible con rc.local:

    [Unit]
    Description=/etc/rc.local Compatibility
    ConditionPathExists=/etc/rc.local

    [Service]
    Type=forking
    ExecStart=/etc/rc.local start
    TimeoutSec=0
    RemainAfterExit=yes
    GuessMainPID=no

    [Install]
    WantedBy=multi-user.target
  3. Recarga los servicios del sistema:

    sudo systemctl daemon-reload
  4. Activa el servicio para que se inicie al encender el sistema:

    sudo systemctl enable rc-local
  5. Inicia el servicio:

    sudo systemctl start rc-local

5. Verificar el estado de rc.local

Puedes verificar que rc.local se ha ejecutado correctamente o si ha ocurrido algún error con el siguiente comando:

sudo systemctl status rc-local

Esto te mostrará el estado del servicio y si se ejecutó con éxito.

6. Ejemplo práctico completo

Si tienes un script llamado mi_script.sh que imprime "Hola Mundo" en un archivo de log y quieres que se ejecute al inicio:

  1. Crea el script:

    nano /home/usuario/mi_script.sh
  2. Añade el siguiente contenido:

    #!/bin/bash echo "Hola Mundo - $(date)" >> /home/usuario/log.txt
  3. Haz que el script sea ejecutable:

    chmod +x /home/usuario/mi_script.sh
  4. Edita el archivo rc.local:

    sudo nano /etc/rc.local
  5. Añade el script al rc.local:

    #!/bin/sh -e
    /home/usuario/mi_script.sh
    exit 0
  6. Habilita y ejecuta el servicio rc-local como se mencionó antes.

7. Conclusión

Usar rc.local es una manera sencilla y directa de hacer que scripts personalizados se ejecuten al iniciar el sistema. Sin embargo, para distribuciones modernas que usan systemd, es importante asegurarse de que el servicio rc-local esté habilitado correctamente. Esto garantiza que tus scripts se ejecuten sin problemas al inicio.