Descripción General
En el mundo de la administración de sistemas y la gestión de servidores, la automatización es clave para mejorar la eficiencia y reducir errores humanos. Cron, el programador de tareas de Unix/Linux, permite ejecutar comandos y scripts en intervalos regulares sin intervención manual, convirtiéndose en una herramienta esencial para cualquier administrador de sistemas o desarrollador, personalmente investigando un poco me encontré una manera de realizar estas tareas desde una interfaz web usando Webmin.
¿Qué es Webmin?
Webmin es una herramienta de administración de sistemas basada en la web que te permite controlar varias configuraciones del sistema desde un navegador. Con Webmin, puedes gestionar cuentas de usuario, servicios de red, configuraciones de seguridad y, lo más importante para este artículo, cron jobs.
1. Instalar Webmin en Ubuntu/Debian:
Abrimos una terminal y ejecutamos los siguientes comandos:
1 2 3 | sudo apt update sudo apt install wget wget http://prdownloads.sourceforge.net/webadmin/webmin_1.999_all.deb sudo dpkg --install webmin_1.999_all.deb |
En mi caso me faltaban algunas dependencias, estoy usando un Ubuntu 20.04, por lo que me mostro el siguiente error:
2. Acceder a la Interfaz Web:
Una vez que Webmin esté instalado, podemos acceder a la interfaz de administración a través del navegador, escribiendo:
Reemplazamos la URL con la dirección IP o el nombre de dominio del servidor utilizado.
En mi caso utilicé el dominio: https://jobs-virtual-machine:10000
3. Acceder a la Gestión de Cron Jobs
Iniciamos sesión en Webmin: Cuando accedemos a Webmin en el navegador, se nos pedirá que iniciemos sesión. Usamos las credenciales de administrador del sistema.
Accedemos a «Cron Jobs»: En el menú principal, buscamos la sección llamada «System». Dentro de esa sección, hacemos clic en «Scheduled Cron Jobs».

4. Diagrama General
5. Primera tarea automatizada
Para nuestra primera automatización vamos a realizar una tarea bastante simple, supongamos que tenemos un conjunto de servidores que necesitan ser reiniciados una vez por semana, realizar esto de forma manual podría resultar un poco tedioso, sin embargo, podemos conectarnos por SSH a través de Python usando el módulo Paramiko, y que ejecute un reinicio. Posterior a esto solo nos quedaría programar esta tarea en python, para que se ejecute por ejemplo todos los viernes y ya no tendríamos que preocuparnos por verificar todas las semanas en reiniciar o ejecutar estas tareas de forma manual, veamos cómo hacerlo.
Script para conexión a varios equipos SSH:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | import paramiko import subprocess import time # Datos de conexión SSH username = 'kali' password = 'kali' # Nombre del archivo donde se guardará la salida output_file = 'DataPrueba.txt' # Dirección IP directamente definida ip = '192.168.25.155' # Cambia esta dirección IP a la del servidor que deseas reiniciar # Función para hacer ping a una IP y verificar la conectividad def ping_ip(ip): try: # Comando para hacer ping a la IP response = subprocess.run(['ping', '-c', '1', ip], stdout=subprocess.PIPE, stderr=subprocess.PIPE) if response.returncode == 0: return True # La IP está accesible else: return False # La IP no está accesible except Exception as e: print(f"Error al hacer ping a {ip}: {e}") return False try: # Comando de reinicio reboot_command = 'echo "kali" | sudo -S reboot' # Comando para reiniciar el servidor con sudo # Iniciar una conexión SSH ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # Abrir el archivo de salida para escribir los resultados with open(output_file, 'w') as f: f.write(f"=== Conexión SSH al servidor {ip} ===\n") # Hacer ping al servidor antes de intentar reiniciarlo f.write(f"Haciendo ping a la IP {ip} antes del reinicio...\n") if ping_ip(ip): f.write(f"La IP {ip} es accesible antes del reinicio.\n") else: f.write(f"La IP {ip} NO es accesible antes del reinicio.\n") try: # Conectar al servidor SSH ssh_client.connect(hostname=ip, port=22, username=username, password=password) # Ejecutar el comando de reinicio stdin, stdout, stderr = ssh_client.exec_command(reboot_command) # Leer la salida y los errores output = stdout.read().decode() error = stderr.read().decode() if output: f.write(f"Comando ejecutado correctamente: {output}\n") if error: f.write(f"Error: {error}\n") # Esperar un poco para permitir que el servidor se reinicie f.write("Esperando a que el servidor se reinicie...\n") time.sleep(15) # Espera de 15 segundos # Hacer ping a la IP después del reinicio para verificar la conectividad f.write(f"Haciendo ping a la IP {ip} después del reinicio...\n") if ping_ip(ip): f.write(f"La IP {ip} es accesible después del reinicio, lo que indica que el servidor probablemente se reinició.\n") else: f.write(f"La IP {ip} sigue sin ser accesible después del reinicio.\n") except Exception as e: f.write(f"Error al conectar con {ip}: {e}\n") print(f"Error al conectar con {ip}: {e}") f.write(f"=== Finalizada la conexión SSH al servidor {ip} ===\n\n") print(f"Resultado de {ip} guardado en '{output_file}'") finally: # Cerrar conexión SSH al finalizar ssh_client.close() except Exception as e: print(f"Ocurrió un error: {e}") |
Para la demostración use una maquina Kali Linux suponiendo que sea el servidor, el script se puede modificar para que lea un conjunto de IP, desde un Excel y eso nos permitiría aplicar comandos a un grupo de equipos y ahorrar tiempo.
Con el objetivo de probar mi script hice uso de Thonny es un IDE simple, especialmente adecuado para principiantes que están empezando a aprender Python. Tiene una interfaz sencilla y viene con todo lo que necesitas para escribir y ejecutar código Python sin necesidad de configuraciones adicionales.
Instalar Thonny desde la terminal:
1 | sudo apt install thonny |
En la siguiente imagen se observa el IDE con las pruebas y resultados del script utilizado:
En el archivo Data.txt que es generado por el script, podemos ver que se realizó de manera correcta el proceso:
Como paso final ahora vamos a programar la tarea, para que todos los días a las 6:02 PM se ejecute un reinicio al equipo, lo podemos realizar desde el WebAdmin.
Los pasos a seguir se definen en la siguiente imagen:
- Ir a la Sección System.
- Ir a la Sección Scheduled Cron Jobs.
- Ejecutar tarea como usuario root.
- Comando que queremos ejecutar.
- Programación de fechas, horas, días del comando que vamos a ejecutar.
- Guardar y como recomendación verificar su correcto funcionamiento.
Para verificar que la tarea se ejecutó de forma automática y correcta podemos utilizar el siguiente comando:
1 | grep CRON /var/log/syslog |
La salida debe coincidir con la hora de nuestras programaciones:
Conclusión
En este artículo hemos aprendido cómo configurar y ejecutar cron jobs en Ubuntu, así como verificar su ejecución mediante el uso de logs y archivos de salida. Los cronjobs son herramientas poderosas para automatizar tareas en sistemas Linux, y conocer cómo monitorear su correcta ejecución es esencial para asegurar que los procesos automatizados se completen sin problemas.
Por otra parte, hemos visto como crear estas tareas de forma sencilla con el WebAdmin de Linux. Hay muchas más capacidades que podemos utilizar de esta serie de herramientas presentadas, sin embargo, la idea de este artículo es dar a conocer ideas sencillas que puedan aportar a los administradores de sistemas herramientas para su día a día.