TUTORIAL: Cómo correr un script de Python al iniciar el Raspberry Pi

Acabas de armar tu robot y programar tu Raspberry Pi para controlarlo. Ya tienes tu programa en Python y corre perfectamente pero necesitas que ahora corra automáticamente cada vez que inicies tu Raspberry Pi. Llegaste al tutorial correcto.

Vamos a ver cómo hacer que cada vez que se inicie tu Raspberry Pi se corra un script Python (o cualquier otro comando en la terminal de hecho).

Para lograr nuestro objetivo vamos a utilizar el comando de linux systemd, o “System and Service Manager”.

Vamos a suponer que tienes un script Python que deseas correr con el nombre “robot.py”. Vamos a crear un archivo de servicio que tendrá las instrucciones de lo que queremos correr.

Para esto abrimos el editor y vamos a crear un archivo en lib/systemd/system/robot.service

Y pegamos el siguiente código dentro del archivo

[Unit]
Description=Mi Servicio para Robot
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python3 /home/pi/robot.py

[Install]
WantedBy=multi-user.target

Este archivo lo que hace es crear un servicio llamado “Mi Servicio para Robot” y básicamente le estamos diciendo que corra después de que el ambiente de multi-user este disponible.

El parámetro ExecStart indica los comandos que queremos correr, en este caso es nuestro script de Python, pero en realidad podemos agregar cualquier comando que deseemos (como si lo corriéramos en la terminal). El Type como “idle” se asegura que se corra el comando una vez que el Raspberry haya terminado de cargar todo después de la secuencia de inicio.

Nuestro archivo debe tener el permiso como 644 para poder ejecutar:

sudo chmod 644 /lib/systemd/system/robot.service

ahora que está definido vamos a utilizar systemctl para configurar que el script se corra al inicio

sudo systemctl daemon-reload
sudo systemctl enable robot.service

Listo, ahora puedes reiniciar tu Raspberry y comprobar que se haya corrido. Una vez reiniciado tu Raspberry puedes revisar si tu script corrió con la siguiente línea

sudo systemctl status robot.service

Si estás utilizando el Raspberry para controlar un robot y no tienes conecado un monitor no podrás saber si ya terminó de reiniciarse, por lo que puedes agregar una línea en tu código que encienda un LED en un pin GPIO para indicarte que ya está cargado tu programa.

Fuente: https://www.raspberrypi-spy.co.uk/2015/10/how-to-autorun-a-python-script-on-boot-using-systemd/