lsf-20260826
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| lsf-20260826 [2026/08/27 00:18] – jared | lsf-20260826 [2026/08/27 02:06] (actual) – [Backups] jared | ||
|---|---|---|---|
| Línea 4: | Línea 4: | ||
| * <code bash> | * <code bash> | ||
| - | ===== Script | + | ===== Script |
| * Monitorear errores del sistema: | * Monitorear errores del sistema: | ||
| * <file python monitor.py> | * <file python monitor.py> | ||
| Línea 39: | Línea 39: | ||
| </ | </ | ||
| + | * Crear una carpeta <code bash> | ||
| + | * Copiar el archivo monitor.py dentro de esta carpeta. | ||
| + | * Ejecutar: | ||
| + | * <code bash> python3 monitor.py</ | ||
| + | |||
| + | ===== Script Python IA ===== | ||
| + | * Descargar un archivo monitor-ia.py | ||
| + | * <file python monitor-ia.py> | ||
| + | import subprocess | ||
| + | import json | ||
| + | import sys | ||
| + | |||
| + | def get_errors(): | ||
| + | """ | ||
| + | Obtiene los errores del sistema desde el journal (systemd). | ||
| + | Retorna una lista de líneas de error (hasta 50). | ||
| + | """ | ||
| + | try: | ||
| + | # Opción 1: journalctl (mejor para sistemas con systemd) | ||
| + | # -p 3 : solo errores (priority err) | ||
| + | # -b : desde el último arranque | ||
| + | # -n 50: últimas 50 líneas | ||
| + | result = subprocess.run( | ||
| + | [' | ||
| + | capture_output=True, | ||
| + | text=True, | ||
| + | check=True | ||
| + | ) | ||
| + | lines = result.stdout.strip().splitlines() | ||
| + | # Filtra líneas vacías | ||
| + | errors = [line for line in lines if line.strip()] | ||
| + | if errors: | ||
| + | return errors | ||
| + | else: | ||
| + | # Si no hay errores en journal, probar con dmesg | ||
| + | return get_errors_dmesg() | ||
| + | except (subprocess.CalledProcessError, | ||
| + | # Si journalctl no está disponible, usar dmesg | ||
| + | return get_errors_dmesg() | ||
| + | |||
| + | def get_errors_dmesg(): | ||
| + | """ | ||
| + | try: | ||
| + | result = subprocess.run( | ||
| + | [' | ||
| + | capture_output=True, | ||
| + | text=True, | ||
| + | check=True | ||
| + | ) | ||
| + | lines = result.stdout.strip().splitlines() | ||
| + | # Tomar últimas 30 líneas | ||
| + | return lines[-30:] if lines else [] | ||
| + | except (subprocess.CalledProcessError, | ||
| + | # Si nada funciona, retornar lista vacía | ||
| + | return [] | ||
| + | |||
| + | def analyze_with_llama(errors): | ||
| + | """ | ||
| + | if not errors: | ||
| + | return "No hay errores que analizar." | ||
| + | |||
| + | # Limitamos a los primeros 10 para no exceder el contexto | ||
| + | error_text = " | ||
| + | prompt = f""" | ||
| + | Eres un experto en administración de sistemas Linux. | ||
| + | Analiza los siguientes errores del sistema y sugiere soluciones concretas: | ||
| + | |||
| + | {error_text} | ||
| + | |||
| + | Sugerencias (en español, concisas): | ||
| + | """ | ||
| + | try: | ||
| + | # Ajusta la ruta del modelo si es necesario | ||
| + | result = subprocess.run( | ||
| + | [ | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ], | ||
| + | capture_output=True, | ||
| + | text=True, | ||
| + | check=True | ||
| + | ) | ||
| + | return result.stdout | ||
| + | except subprocess.CalledProcessError as e: | ||
| + | return f" | ||
| + | except FileNotFoundError: | ||
| + | return " | ||
| + | |||
| + | def main(): | ||
| + | errors = get_errors() | ||
| + | if not errors: | ||
| + | print(" | ||
| + | return | ||
| + | |||
| + | print(" | ||
| + | suggestions = analyze_with_llama(errors) | ||
| + | print(" | ||
| + | print(suggestions) | ||
| + | |||
| + | if __name__ == " | ||
| + | main() | ||
| + | |||
| + | </ | ||
| + | * Agregar el PATH con los binarios de llamacpp. | ||
| + | * Editar el archivo .baschrc | ||
| + | * Agregar al final la siguiente linea y guardar los cambios | ||
| + | * <code bash> | ||
| + | * <code text> | ||
| + | * Recarga de los parámetros | ||
| + | * <code bash> | ||
| + | |||
| + | ===== Portainer docker ===== | ||
| + | - Crear la carpeta portainer/ y dentro docker-compose.yml | ||
| + | - <code bash> | ||
| + | - Archivo docker-compose.yml | ||
| + | - <file yaml docker-compose.yml> | ||
| + | services: | ||
| + | portainer: | ||
| + | image: portainer/ | ||
| + | container_name: | ||
| + | restart: unless-stopped | ||
| + | ports: | ||
| + | - " | ||
| + | - " | ||
| + | volumes: | ||
| + | - / | ||
| + | - portainer_data:/ | ||
| + | environment: | ||
| + | - TZ=America/ | ||
| + | |||
| + | volumes: | ||
| + | portainer_data: | ||
| + | </ | ||
| + | - Crear y ejecutar el contenedor | ||
| + | - <code bash> | ||
| + | - Proceso inicial del usuario admin | ||
| + | - Ingresar a http:// | ||
| + | - Solicita token-setup: | ||
| + | - <code bash> | ||
| + | - Buscar el texto <code text> | ||
| + | |||
| + | ===== Backups ===== | ||
| + | * Carpeta destino para respaldar. | ||
| + | * Crear la carpeta / | ||
| + | * <code bash> | ||
| + | * Cambiar el dueño de la carpeta | ||
| + | * <code bash> | ||
| + | * Comando para respaldar los datos de la carpeta Docuemtos. | ||
| + | * <code bash> | ||
| + | * Automatizar los backups | ||
| + | * Editanto crontab <code bash> | ||
| + | * Solicitara que editor se utilizara por defecto. ej nano | ||
| + | * Agrega el proce cada 5 minutos | ||
| + | * <code text>5 * * * * rsync -av ~/ | ||
| + | * Listamos el cambio | ||
| + | * <code bash> | ||
| + | |||
| + | ===== Terminal wave ===== | ||
| + | * https:// | ||
lsf-20260826.1787789923.txt.gz · Última modificación: por jared
