Python scripting: automatiza tareas de sysadmin
Aprende a automatizar tareas de sysadmin con Python scripting: scripts prácticos para gestión de servidores, redes y más.
Cuando trabajamos como administradores de sistemas, la repetición de tareas como la limpieza de logs, la monitorización de discos o la gestión de usuarios puede consumir horas. Python se ha convertido en mi navaja suiza para automatizar estas rutinas, gracias a su sintaxis clara y a bibliotecas como os, shutil y subprocess. En este artículo comparto algunos scripts prácticos que uso a diario en servidores Linux.
Monitorización de espacio en disco con alertas
Uno de los problemas más comunes es quedarse sin espacio en particiones críticas. Este script recorre los puntos de montaje y envía una alerta si el uso supera el 80%.
import shutil
import smtplib
def check_disk_usage(threshold=80):
partitions = shutil.disk_usage('/')
percent = (partitions.used / partitions.total) * 100
if percent > threshold:
print(f"ALERTA: Disco al {percent:.2f}%")
# Aquí iría el envío de correo o notificación
check_disk_usage()
Lo ejecuto con un cron cada hora: 0 * * * * /usr/bin/python3 /scripts/check_disk.py
Limpieza automática de logs antiguos
Los logs de aplicaciones como Nginx o Apache pueden llenar el disco rápidamente. Este script elimina archivos con más de 30 días de antigüedad en directorios específicos.
import os
import time
from pathlib import Path
def clean_old_logs(directory, days=30):
now = time.time()
cutoff = now - (days * 86400)
for file in Path(directory).glob('*.log*'):
if file.stat().st_mtime < cutoff:
file.unlink()
print(f"Eliminado: {file}")
clean_old_logs('/var/log/nginx')
clean_old_logs('/var/log/apache2')
Lo integro en un script mayor que también comprime logs recientes con gzip antes de eliminarlos.
Gestión masiva de usuarios desde CSV
Cuando hay que dar de alta a 20 usuarios en un servidor, hacerlo manualmente es un error. Este script lee un archivo CSV con nombres de usuario y grupos, y crea las cuentas automáticamente.
import csv
import subprocess
def create_users(csv_file):
with open(csv_file, 'r') as f:
reader = csv.DictReader(f)
for row in reader:
username = row['username']
group = row['group']
subprocess.run(['useradd', '-m', '-G', group, username])
print(f"Usuario {username} creado en grupo {group}")
create_users('usuarios.csv')
Uso subprocess.run en lugar de os.system por seguridad y control de errores. Siempre verifico la salida con check=True.
Copias de seguridad incrementales con rsync
Aunque rsync es potente por sí solo, un wrapper en Python permite añadir lógica condicional y registro de actividad.
import subprocess
import datetime
def backup_web(source, dest):
log_file = f"/var/log/backup_{datetime.date.today()}.log"
cmd = ['rsync', '-avz', '--delete', source, dest]
with open(log_file, 'w') as f:
result = subprocess.run(cmd, stdout=f, stderr=subprocess.STDOUT)
if result.returncode == 0:
print(f"Backup completado: {log_file}")
else:
print(f"Error en backup. Revisa {log_file}")
backup_web('/var/www/html/', 'backup@servidor:/backups/web/')
Este script lo combino con un chequeo previo de conectividad mediante ping para evitar backups fallidos.
Conclusión
Python no reemplaza a Bash para tareas muy sencillas, pero cuando necesitas lógica condicional, manejo de errores o integración con APIs, se convierte en la herramienta ideal. Empieza con estos ejemplos, adáptalos a tu infraestructura y verás cómo reduces horas de trabajo repetitivo. Recuerda probar siempre en un entorno de staging antes de ejecutarlos en producción.