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
?
- Control Avanzado:
systemd
permite iniciar, detener, reiniciar y monitorear el servicio en tiempo real, algo querc.local
no soporta. - Reinicio Automático: Los servicios configurados con
systemd
pueden reiniciarse automáticamente si fallan, garantizando una mayor disponibilidad. - Loggin Integrado: Con
systemd
, puedes ver la salida de tu script en eljournal
, facilitando la depuración y monitoreo. - 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
yStandardError
envían la salida del servicio ajournal
para monitoreo conjournalctl
.Restart=always
asegura que el servicio se reinicie si falla.User=pi
ejecuta el servicio bajo el usuariopi
, 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.
Dejar una contestacion