Automatiza tu trabajo: Python para Sysadmin

Descubre cómo Python simplifica las tareas diarias del sysadmin: automatiza procesos, gestiona sistemas y ahorra tiempo con ejemplos prácticos.

Cuando el día a día de un administrador de sistemas se llena de tareas repetitivas —revisar logs, comprobar discos, reiniciar servicios—, el scripting se convierte en el mejor aliado. Python, por su sintaxis limpia y su enorme biblioteca estándar, es perfecto para automatizar estas rutinas sin depender de herramientas externas. En este artículo veremos ejemplos prácticos para aplicar desde ya en tu servidor.

Por qué Python y no solo Bash

Bash es potente para tareas rápidas, pero cuando necesitas manejar estructuras de datos complejas, hacer peticiones HTTP o trabajar con APIs, Python gana por goleada. Además, su módulo subprocess te permite ejecutar comandos del sistema y capturar su salida sin dolor. La curva de aprendizaje es baja si ya conoces lo básico del lenguaje, y los scripts son mucho más legibles y mantenibles que un script de Bash largo.

Monitorización de recursos con psutil

Una de las tareas más comunes es comprobar el estado del sistema. Con la librería psutil (instalable con pip install psutil) puedes obtener CPU, memoria, disco y red en tiempo real. Aquí tienes un ejemplo que envía una alerta si el disco supera el 85% de uso:

import psutil

umbral = 85
particiones = psutil.disk_partitions()

for p in particiones:
    if p.fstype and 'loop' not in p.device:
        uso = psutil.disk_usage(p.mountpoint).percent
        if uso > umbral:
            print(f"ALERTA: {p.mountpoint} al {uso}%")
            # Aquí podrías enviar un correo o un mensaje a Slack

Este script se puede ejecutar con cron cada 10 minutos y, si quieres ir más allá, sustituir el print por una llamada a una API o un comando mail.

Gestión de servicios con subprocess

¿Necesitas reiniciar un servicio caído o comprobar su estado? subprocess es tu herramienta. El siguiente código verifica si Nginx está activo y, si no, lo levanta:

import subprocess

def servicio_activo(nombre):
    try:
        salida = subprocess.run(['systemctl', 'is-active', nombre],
                                capture_output=True, text=True)
        return salida.stdout.strip() == 'active'
    except Exception as e:
        print(f"Error: {e}")
        return False

servicio = 'nginx'
if not servicio_activo(servicio):
    print(f"Reiniciando {servicio}...")
    subprocess.run(['systemctl', 'restart', servicio])
else:
    print(f"{servicio} ya está activo")

Este patrón es fácil de extender a varios servicios usando un bucle sobre una lista. Eso sí, asegúrate de ejecutarlo con los permisos adecuados (usando sudo en cron, por ejemplo).

Limpieza de logs antiguos con pathlib

Los logs que se acumulan llenan el disco sin piedad. Con pathlib y datetime puedes borrar archivos con más de N días de antigüedad de forma segura:

from pathlib import Path
import time

directorio = Path('/var/log')
dias_max = 30
tiempo_limite = time.time() - (dias_max * 86400)

for fichero in directorio.glob('*.log'):
    if fichero.is_file() and fichero.stat().st_mtime < tiempo_limite:
        print(f"Eliminando {fichero}")
        fichero.unlink()

Este script es idempotente: puedes ejecutarlo mil veces sin riesgo. Lo ideal es combinarlo con logrotate, pero para servidores pequeños o aplicaciones propias, esta solución ligera es más que suficiente.

Conclusión

Python no sustituye a Bash, pero lo complementa para tareas donde la lógica y el manejo de datos son protagonistas. Empieza con estos tres ejemplos, adáptalos a tu entorno y verás cómo en una semana recuperas horas de trabajo manual. La clave está en empezar pequeño: automatiza una tarea, pruébala bien y luego añade más. Tu yo del futuro (y tu espalda) te lo agradecerán.