Automatización de tareas programadas con Lucky: Integración de scripts Shell y Python

Módulo de tareas programadas en Lucky

El sistema de tareas programadas de Lucky permite ejecutar scripts externos y controlar módulos internos mediante expresiones cron o intervalos fijos. Esta funcionalidad habilita la automatización de operaciones de red como port forwarding, DDNS y proxy inverso.

Capacidad Descripción Casos de uso
Disparadores temporales Cron expressions y intervalos regulares Ejecución periódica de scripts, activación/desactivación programada
Ejecución de scripts Bash, Python, binarios compilados Flujos personalizados, integración con sistemas externos
Control de módulos Port forwarding, DDNS, reverse proxy Gestión dinámica de servicios de red
Evaluación condicional Detección de cambios de IP, estado de red Respuesta automática a eventos de red

Ejemplo de script Bash para monitoreo de conectividad

El siguiente script verifica la disponibilidad de red y ajusta las reglas de port forwarding mediante la API REST de Lucky:

#!/bin/bash
# /opt/scripts/connectivity_guard.sh

LUCKY_API="http://127.0.0.1:16601/api"
RULE_IDENTIFIER="rule_123"
TARGET_HOST="1.1.1.1"

ping -c 1 -W 3 $TARGET_HOST &>/dev/null
CONNECTIVITY=$?

if [ $CONNECTIVITY -eq 0 ]; then
    logger "Conectividad OK - activando forwarding"
    curl -s -X POST "$LUCKY_API/portforward/enable" \
         -H "Content-Type: application/json" \
         -d "{\"rule_id\": \"$RULE_IDENTIFIER\"}"
else
    logger "Sin conectividad - desactivando forwarding"
    curl -s -X POST "$LUCKY_API/portforward/disable" \
         -H "Content-Type: application/json" \
         -d "{\"rule_id\": \"$RULE_IDENTIFIER\"}"
fi

Script Python para supervisión de DDNS

Para escenarios que requieren lógica más elaborada, Python ofrece mayor flexibilidad en el procesamiento de respuestas API y envío de notificaciones:

#!/usr/bin/env python3
# /opt/scripts/ddns_supervisor.py

import logging
import urllib.request
import json
from datetime import datetime

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')

LUCKY_BASE_URL = "http://127.0.0.1:16601/api"

def fetch_ddns_tasks():
    """Obtiene el listado de tareas DDNS desde la API de Lucky."""
    req = urllib.request.Request(f"{LUCKY_BASE_URL}/ddns/tasks")
    with urllib.request.urlopen(req) as response:
        payload = json.loads(response.read().decode())
    return payload

def notify_failure(task_name, error_detail):
    """Envía alerta ante fallos en tareas DDNS."""
    timestamp = datetime.now().isoformat()
    alert_msg = f"[{timestamp}] DDNS ALERT: {task_name} - {error_detail}"
    logging.error(alert_msg)
    # Integración con webhook de notificaciones aquí

def evaluate_tasks():
    """Evalúa el estado de cada tarea DDNS."""
    try:
        tasks = fetch_ddns_tasks()
        for entry in tasks:
            current_state = entry.get("state", "unknown")
            if current_state == "error":
                notify_failure(entry["label"], entry.get("detail", "sin detalles"))
            else:
                logging.info(f"Tarea {entry['label']} - estado: {current_state}")
    except Exception as err:
        logging.critical(f"Error consultando API: {err}")

if __name__ == "__main__":
    evaluate_tasks()

Configuración mediante interfaz web

Para registrar una tarea programada en Lucky:

  1. Acceder al panel administrativo en http://IP_DISPOSITIVO:16601
  2. Navegar a la sección "Tareas programadas" en el menú lateral
  3. Pulsar "Nueva tarea" para crear una entrada
  4. Definir los parámetros:
    • Patrón de ejecución: expresión cron o intervalo en minutos
    • Acción: seleccionar "Ejecutar script"
    • Ruta del script: ruta absoluta al archivo ejecutable
    • Límite de tiempo: valor en segundos antes de cancelar la ejecución

Escenarios de aplicación

Gestión inteligente de ancho de banda

Scripts que analizan el tráfico de red y desactivan reglas de forwarding no críticas durante horas pico para priorizar servicios esenciales.

Políticas de seguridad dinámicas

Actualización periódica de listas de control de acceso mediante scripts que sincronizan reglas desde fuentes externas de reputación de IP.

Respaldo DNS multi-provider

Scripts que mantienen registros DNS actualizados en múltiples proveedores simultáneamente para garantizar redundancia.

Vigilancia de dispositivos internos

Detección programada de disponibilidad de equipos en la red local con notificación automática ante caídas.

Intergación avanzada con API REST

Lucky expone endpoints REST que permiten controlar módulos directamente desde scripts:

# Consultar tareas DDNS activas
curl http://127.0.0.1:16601/api/ddns/tasks

# Activar una regla de port forwarding específica
curl -X POST http://127.0.0.1:16601/api/portforward/enable \
     -H "Content-Type: application/json" \
     -d '{"rule_id": "mi_regla"}'

# Actualizar configuración de proxy inverso
curl -X PUT http://127.0.0.1:16601/api/reverseproxy \
     -H "Content-Type: application/json" \
     -d '{"config_data": "nueva_config"}'

Recomendaciones operativas

  • Verificar que el proceso de Lucky tenga permisos de ejecución sobre los scripts definidos
  • Incluir registro detallado dentro de cada script para facilitar diagnóstico de fallos
  • Configurar límites de tiempo coherentes con la complejidad de cada operación
  • Implementar manejo de excepciones para evitar que errores aislados afecten el sistema completo
  • Evitar frecuencias de ejecución excesivas en scripts con alto consumo de recursos

Etiquetas: Lucky cron shell scripting Python API REST

Publicado el 7-4 02:55