Ejecutar script python como servicio en la Raspberry Pi

Script python como servicio en la raspberry
Script python como servicio en la raspberry

Ejecutar scripts de Python como servicios en Linux es una práctica esencial cuando necesitas confiabilidad y control avanzado, ya sea en un servidor, un Raspberry Pi o cualquier dispositivo Linux. A diferencia de rc.local (ver tutorial), que permite ejecutar scripts al inicio del sistema, crear un servicio con systemd ofrece una solución escalable y robusta, perfecta para aplicaciones que requieren monitoreo y reinicio automático en caso de fallo. A continuación, exploraremos cómo crear un servicio para tu script de Python y las ventajas de esta metodología.

¿Por Qué Elegir un Servicio en Linux Sobre rc.local?

  1. Control Avanzado: systemd permite iniciar, detener, reiniciar y monitorear el servicio en tiempo real, algo que rc.local no soporta.
  2. Reinicio Automático: Los servicios configurados con systemd pueden reiniciarse automáticamente si fallan, garantizando una mayor disponibilidad.
  3. Loggin Integrado: Con systemd, puedes ver la salida de tu script en el journal, facilitando la depuración y monitoreo.
  4. Escalabilidad: systemd permite gestionar múltiples servicios de manera independiente, lo que lo hace ideal para sistemas de producción y aplicaciones empresariales.

Paso a Paso para Configurar un Script de Python como Servicio en Linux

Paso 1: Preparar el Script de Python

Supongamos que tienes un script llamado control.py, que controla el parpadeo de un LED en un Raspberry Pi. Asegúrate de que tu script funcione correctamente antes de configurarlo como servicio.

# control.py
from gpiozero import LED
from time import sleep

led = LED(17)

while True:
    print("Encendiendo LED")
    led.on()
    sleep(1)
    print("Apagando LED")
    led.off()
    sleep(1)

Guarda el script en el directorio de tu usuario, por ejemplo, en /home/pi/control.py.

Paso 2: Crear el Archivo de Servicio de systemd

Crear el archivo del servicio: En la terminal, ejecuta:

sudo touch /etc/systemd/system/parpadeo_led.service
sudo nano /etc/systemd/system/parpadeo_led.service

Configurar el archivo del servicio: Dentro del archivo, añade la siguiente configuración:

[Unit]
Description=Servicio de Parpadeo de LED
After=network.target

[Service]
ExecStart=/usr/bin/python3 -u /home/pi/control.py
WorkingDirectory=/home/pi
StandardOutput=journal
StandardError=journal
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

[Unit]: Define las características generales del servicio. After=network.target asegura que el servicio se inicie después de la red.[Service]:

  • ExecStart especifica el comando para ejecutar el script.
  • WorkingDirectory define el directorio donde se encuentra el script.
  • StandardOutput y StandardError envían la salida del servicio a journal para monitoreo con journalctl.
  • Restart=always asegura que el servicio se reinicie si falla.
  • User=pi ejecuta el servicio bajo el usuario pi, con sus permisos.

[Install]: WantedBy=multi-user.target configura el servicio para ejecutarse en modo multiusuario, sin entorno gráfico.

Paso 3: Activar y Ejecutar el Servicio

Actualizar los archivos de systemd:

sudo systemctl daemon-reload

Habilitar el servicio para que se inicie automáticamente:

sudo systemctl enable parpadeo_led.service

Iniciar el servicio manualmente por primera vez:

sudo systemctl start parpadeo_led.service

Verificar el estado del servicio:

sudo systemctl status parpadeo_led.service

Paso 4: Monitorear el Servicio

Una de las grandes ventajas de systemd es la capacidad de monitorear los logs del servicio en tiempo real. Esto se logra con el siguiente comando:

sudo journalctl -u parpadeo_led.service -f

Ventajas de Usar un Servicio Sobre rc.local

Usar systemd para ejecutar un script como servicio tiene claras ventajas sobre rc.local:

  • Mayor Control: Puedes iniciar, detener y reiniciar el servicio sin necesidad de reiniciar el sistema, lo que es mucho más eficiente.
  • Fiabilidad en Producción: Con la opción Restart=always, el servicio se reinicia automáticamente en caso de fallo, asegurando alta disponibilidad.
  • Facilidad de Monitoreo: La integración con journalctl permite revisar fácilmente los logs y mensajes de error, ayudando en la depuración.
  • Flexibilidad y Escalabilidad: Puedes configurar múltiples servicios, cada uno con su propio archivo y opciones de configuración, sin interferencias.

Conclusión

Configurar tu script de Python como servicio de Linux usando systemd te brinda una solución mucho más robusta y confiable que rc.local. Esta metodología es ideal para entornos de producción o aplicaciones críticas que requieren un monitoreo y control constantes. Además, el servicio se ejecutará automáticamente en cada inicio, se mantendrá activo y reiniciará en caso de errores, asegurando que tu script esté siempre en funcionamiento.

Sé el primero en comentar

Dejar una contestacion

Tu dirección de correo no será publicada.


*