¿Raspberry Pi: Cómo Iniciar Automáticamente Un Programa?


Ejecutar un programa o un script en el arranque no es realmente intuitivo, sea cual sea tu sistema.
Es una pregunta que escucho a menudo, así que he creado un post entero sobre esto.
Probablemente, estás tratando de iniciar un script o una aplicación, que es obligatoria en tu configuración, automáticamente en el arranque.
No es tan complicado, tienes varias formas, te voy a enseñar cuatro.

Hay varias soluciones para iniciar automáticamente un script o un programa al arrancar.
En Raspberry Pi OS Lite, la más fácil es usar “crontab” con el @reboot event.
En modo gráfico, se puede utilizar la aplicación “Desktop Sessions Settings” para hacer lo mismo.

Así que sí, es posible, pero tienes que encontrar la solución que se adapte a tus necesidades.
También puedes elegir seguir “las buenas prácticas”, o quedarte solo con la solución más sencilla de recordar y hacer.
Esta última suele ser mi opción favorita, no me importan las buenas prácticas cuando soy el único que va a utilizar el sistema.
¡Vamos!

Cómo iniciar automáticamente un programa

En esta primera parte, iré directamente al punto principal: cómo iniciar cualquier script o programa en el arranque.
Para este ejemplo, usaré mi script de prueba que está en la carpeta Desktop, así que me voy a /home/pi/Desktop/test.sh.

Debes cambiar esta línea y sustituirlo con el script o programa que desea ejecutar.
Si no tienes ni idea de qué comando tienes que escribir, consulta la segunda parte de esta guía :).

1 – Utilizar crontab

Cron es un servicio, que se inicia automáticamente en cada arranque de la Raspberry Pi, que permite al usuario ejecutar comandos programados.
Un crontab es un archivo que nos permitirá listar lo que queremos ejecutar y cuándo iniciarlo, en un formato comprensible para el servicio cron.

Crontab tiene muchas opciones para ejecutar un script a una hora específica o regularmente (diariamente, semanalmente, 3 veces al mes, etc.).
Por cierto, tengo un post sobre esto específicamente y que puedes consultar para saber más (en inglés).
Pero no es eso lo que buscamos.

Crontab también añade la posibilidad de ejecutar un script en el arranque, con la opción @reboot.
Esta es la primera solución que se puede utilizar para ejecutar un programa automáticamente, y probablemente la más fácil de recordar de esta lista.

A continuación se explica cómo hacerlo:

  • Abre un terminal.
  • Abre el archivo de crontab:
    crontab -e
    Si es la primera vez que entras en crontab, debes seleccionar un editor (pulsa Enter para nano).
  • Se obtiene un archivo crontab vacío, con el siguiente aspecto:
  • Pega esta línea que empieza por reboot, y añade tu comando de script justo después, así:
    @reboot /home/pi/Desktop/test.sh
  • Guarda y sal del archivo (CTRL+O, CTRL+X con nano).

La tarea está ahora programada para iniciarse en cada arranque.

2 – Crear un script en /etc/init.d

La segunda solución que puedes utilizar es crear tu script en /etc/init.d.
Generalmente, prefiero este método para algo más grande, como un servicio (como un script de firewall por ejemplo).
Como escribí en la introducción, no es la mejor manera, pero si se respetan las pautas, funciona :).

Sin embargo, hay un formato mínimo que respetar para que el script se inicie en el arranque.
Aquí se explica cómo hacerlo:

  • Crar un nuevo archivo en /etc/init.d:
    sudo nano /etc/init.d/myservice
    Cambia el nombre del archivo para hacerlo explícito.
  • Pega las siguientes líneas (por ejemplo):
!/bin/bash
### BEGIN INIT INFO
# Provides: MyService
# Required-Start:    $all
# Required-Stop: 
# Default-Start:     5 
# Default-Stop:      6 
# Short-Description: Your service description
### END INIT INFO

touch /home/pi/myservice_test
  • Los comentarios del principio son obligatorios para que se inicie en el arranque (nivel de ejecución 5).
    Puedes cambiar el nombre del archivo y la descripción para explicar que hace tu script.
  • Guarda tu archivo y sal (CTRL+X).
  • Añade el permiso de ejecución a tu script:
    sudo chmod +x /etc/init.d/myservice
  • Por último, es necesario indicar al sistema que lo inicie en el arranque utilizando este comando:
    sudo update-rc.d myscript defaults

Esto es lo mínimo para que funcione.
Si quieres hacerlo de la mejor manera, tienes que añadir al menos la opción de inicio, parada y reinicio a tu servicio.
Puedes encontrar una documentación detalla aquí si es lo que quieres hacer.

Reinicia para probarlo, si todo es correcto el script debería ejecutarse cada vez que pongas en marcha la Raspberry Pi.

3 – Crear un script que inicie tu trabajo al encender la raspberry

La tercera opción es crear un script de este tipo.
En la versión anterior de Raspberry Pi OS, era posible hacerlo gráficamente, pero en las nuevas versiones de Raspberry Pi OS parece no estar disponible.
Si encuentras una solución en Raspberry Pi OS Desktop házmelo saber

Así que, aquí está cómo hacer esto mediante un archivo de configuración:

  • Crea un archivo /etc/init (¡no init.d!):
    sudo nano /etc/init/myjob.conf
  • Pega el siguiente contenido:
description "my job"
start on startup
task
exec /home/pi/Desktop/test.sh
  • No olvides escribir el nombre del archivo y la descripción para recordar lo que es :).

¡Eso es todo!
Basta con crear este archivo para que funcione en cada arranque.

Una truco extra:
No hay una forma gráfica de hacerlo, pero si puedes gestionar qué tarea de arranque quieres ejecutar en el siguiente boot:

  • Entra en el Menú Principal > Parámetros> Editor del menú principal.
  • Ve al Menú Principal > Parámetros y marca la casilla “Desktop Session Settings”:
  • Cierra esta ventana y vuelve al Menú Principal > Parámetros, luego abre Desktop Session Settings:
  • Aquí puedes comprobar qué tarea de arranque está configurada, y luego habilitarla o deshabilitarla.

4 – Añade una línea en /etc/rc.local

Por último, el método rc.local es probablemente el más fácil, ya que basta con recordar el nombre del archivo para saber qué hacer :).

El archivo rc.local es un script destinado al administrador del sistema (¡a ti!).
En el arranque, es una de las últimas cosas que se ejecutan (al final del nivel de ejecución multiusuario).
Por lo tanto, es exactamente lo que se necesita para ejecutar un servicio personalizado.

A continuación te explicamos cómo utilizarlo:

  • Abre el archivo rc.local:
    sudo nano /etc/rc.local
  • Inserta tu script o servicio justo antes de la línea “exit 0”
    Algo así:
  • Guardar y salir (CTRL+X).

Eso ya está hecho, no hay nada más que hacer.
Puedes reiniciar por ahora por si quieres probarlo.

¡Hola!
Inscríbete para recibir mis últimos tutoriales cada semana.

Encuentra el comando para iniciar

Antes de probar las soluciones anteriores para autoiniciar un programa en el arranque, es posible que necesites ayuda para saber exactamente qué ejecutar.
Lamentablemente, Raspberry Pi OS no incluye una herramienta para iniciar aplicaciones en el arranque, así que tienes que encontrar la línea de comandos correspondiente.
Como no sé exactamente lo que quieres ejecutar, te enseñaré las tres opciones.

Crear un script

Si tu objetivo es crear un script, la línea de comandos será fácil de encontrar, es la ruta y el nombre del script.

Por ejemplo, si tu script está en /usr/local/bin y el nombre del script es start_script.sh.
Puedes utilizar el siguiente comando en una de las 4 soluciones anteriores para iniciar el script en el arranque:
/usr/local/bin/start_script.sh

No olvides añadirle el permiso de ejecución con:
chmod +x /usr/local/bin/start_script.sh

Utilizar la línea de comandos

La segunda opción es ejecutar un comando en el arranque.
Esta es también una solución fácil si sabes exactamente lo que quieres.
Los problemas pueden venir de la ruta de comandos.

Cada comando (htop, nano, mail, etc.) se instala en una ubicación específica del sistema (/usr/local/bin, /usr/bin, etc.).
La mayoría de los comandos funcionarán directamente en el arranque, sin ninguna indicación de ruta.
Pero para algunos programas, a menudo menos conocidos, proyectos de GitHub o cosas así (estoy pensando en AlexaPi por ejemplo), no es el caso, tienes que dar la ruta completa.

Si no tienes ni idea de cuál es la ubicación del ejecutable, aquí tienes algunos consejos
Puedes utilizar el comando “which” para encontrarlo:
which <COMMAND>

He aquí un ejemplo:

Ahora ya sabes que puedes utilizar “/usr/bin/php” en tu archivo de configuración.

Si esto no funciona, el comando “find” también puede ayudarte:
sudo find / -iname php

Encuentra el comando del programa

Mi último consejo es para el programa gráfico que se ejecuta directamente desde el menú principal.
Al no conocer el comando correspodiente, es difícil que se inicie automáticamente.
Aún así hay una manera sencilla de encontrarlo:

  • En el menú principal, ve a Preferencias > Editor del menu principal.
  • Selecciona la aplicación que desea arrancar.
    Están ordenados de la misma manera que en el menú principal, así que puedes navegar por las categorías principales si lo necesitas.
  • A continuación, haz clic en “Propiedades” a la derecha.
  • Aparecerá una ventana con las propiedades del lanzador.
    En el campo de comandos, puede ver el comando exacto utilizado al hacer clic en él en el menú principal.

Ya tienes todo lo que necesitas para aplicar una de las cuatro soluciones que hemos comentado antes.
Si necesitas la ubicación de la ruta, consulta mi consejo anterior con el comando which con el que puedes consultar la ubicación de la ruta.

Conclusión

Eso es todo, ahora ya conoces 4 maneras de iniciar automáticamente un programa en el arranque.
Haz tu elección en función de cuál sea tu programa, o tal vez del método que te resulta más fácil.

También puedes utilizar otras soluciones como “systemd”, puedes consultar la wiki de Debian para saber más sobre esto.

Si conoces otros métodos, más fáciles o no, ¡me gustaría verlos!

Patrick FROMAGET

Hola, soy Patrick. Soy administrador de sistemas Linux, y me apasiona la Raspberry Pi y todos los proyectos sobre este tema. He creado este sitio para compartir con ustedes lo que he aprendido al respecto.

Últimos artículos