Programar Tareas Automáticas
🧭 Navegación:
- Anterior: Ejecutar Scripts en la Nube
- Siguiente: Monitoreo y Mantenimiento
⏰ Automatización temporal: El reloj de tu almacén
Imagina que tu almacén (sistema) necesita realizar ciertas tareas de forma regular: inventarios semanales, limpieza diaria, o pedidos mensuales a proveedores. En lugar de hacerlo manualmente, puedes programar un “reloj inteligente” que active estas tareas automáticamente en los momentos adecuados.
La programación de tareas es ese reloj inteligente que permite que tus scripts se ejecuten automáticamente según un calendario predefinido, sin necesidad de intervención manual.
🤔 ¿Por qué programar tareas?
La programación de tareas ofrece numerosas ventajas:
- Consistencia: Las tareas se ejecutan exactamente cuando deben, sin olvidos
- Eficiencia: No necesitas iniciar manualmente cada tarea
- Conveniencia: Las tareas pueden ejecutarse en horarios de baja actividad
- Regularidad: Ideal para mantenimiento, backups y actualizaciones periódicas
- Automatización completa: Combinado con scripts en la nube, logras un sistema totalmente autónomo
🛠️ Herramientas para programar tareas
Existen diferentes herramientas según el sistema operativo:
En sistemas Linux/Unix (incluido macOS)
Cron es la herramienta estándar para programar tareas en sistemas Unix:
- Potente y flexible
- Integrado en prácticamente todos los sistemas Unix
- Permite programación muy precisa
- Usa una sintaxis específica para definir cuándo se ejecutan las tareas
En Windows
Programador de tareas (Task Scheduler) es la herramienta nativa de Windows:
- Interfaz gráfica intuitiva
- Integrado en todas las versiones de Windows
- Opciones avanzadas para condiciones y disparadores
- Puede ejecutar scripts Python directamente
Bibliotecas de Python
También existen bibliotecas de Python para programar tareas desde dentro de tus scripts:
- schedule: Biblioteca simple para programar tareas
- APScheduler: Programador avanzado con múltiples opciones
- Celery: Sistema completo de colas y tareas (más avanzado)
📅 Programación con Cron (Linux/Unix)
Cron es la herramienta más común para programar tareas en servidores Linux, así que la veremos en detalle.
Sintaxis básica de Cron
Un trabajo (job) de cron se define con una línea en el archivo crontab, con este formato:
m h dom mon dow comando_a_ejecutar
Donde:
- m: Minuto (0-59)
- h: Hora (0-23)
- dom: Día del mes (1-31)
- mon: Mes (1-12)
- dow: Día de la semana (0-7, donde 0 y 7 son domingo)
Cada posición puede contener:
- Un número específico (ej:
5
) - Un rango (ej:
1-5
) - Una lista (ej:
1,3,5
) - Un intervalo (ej:
*/2
significa “cada 2”) - Un asterisco
*
que significa “cualquier valor”
Ejemplos comunes de cron
# Ejecutar cada minuto
* * * * * /ruta/al/script.py
# Ejecutar a las 3:30 AM todos los días
30 3 * * * /ruta/al/script.py
# Ejecutar cada hora en punto
0 * * * * /ruta/al/script.py
# Ejecutar a las 8 AM de lunes a viernes
0 8 * * 1-5 /ruta/al/script.py
# Ejecutar el primer día de cada mes a medianoche
0 0 1 * * /ruta/al/script.py
# Ejecutar cada domingo a las 7 PM
0 19 * * 0 /ruta/al/script.py
# Ejecutar cada 15 minutos
*/15 * * * * /ruta/al/script.py
Configurando tareas con crontab
Para editar tu crontab personal:
# Comando para editar crontab
crontab -e
Esto abrirá un editor donde puedes añadir tus tareas programadas. Para ver las tareas actuales:
# Comando para listar tareas crontab
crontab -l
Ejecutando scripts Python con cron
Para ejecutar un script Python con cron, es importante especificar la ruta completa tanto al intérprete de Python como al script:
# Forma básica (no recomendada para entornos virtuales)
0 3 * * * /usr/bin/python3 /ruta/completa/al/script.py
# Con entorno virtual (recomendado)
0 3 * * * cd /ruta/al/proyecto && /ruta/al/proyecto/venv/bin/python /ruta/al/proyecto/script.py
Capturando la salida y errores
Es buena práctica redirigir la salida y los errores a archivos para poder revisarlos después:
# Ejemplo de redirección de salida y errores
0 3 * * * /usr/bin/python3 /ruta/al/script.py > /ruta/al/logs/script.log 2>&1
Donde:
>
redirige la salida estándar al archivo, reemplazando el contenido anterior2>&1
redirige los errores al mismo lugar que la salida estándar
🪟 Programación con Task Scheduler (Windows)
En Windows, el Programador de tareas ofrece una interfaz gráfica para configurar tareas programadas.
Configurando una tarea básica
- Abre el Programador de tareas (busca “Task Scheduler” en el menú Inicio)
- Haz clic en “Crear tarea básica” en el panel derecho
- Sigue el asistente:
- Nombre y descripción de la tarea
- Disparador (cuándo se ejecutará)
- Acción (qué hará)
- Finalizar
Ejecutando scripts Python
Para ejecutar un script Python:
-
En la sección “Acción”, selecciona “Iniciar un programa”
-
En “Programa/script”, ingresa la ruta al ejecutable de Python:
# Ruta al ejecutable de Python # C:/Path/To/Python/python.exe
-
En “Agregar argumentos”, ingresa la ruta a tu script:
# Ruta al script Python # C:/Path/To/Your/script.py
-
En “Iniciar en”, ingresa el directorio donde está tu script:
# Directorio de trabajo # C:/Path/To/Your
Opciones avanzadas
El Programador de tareas de Windows ofrece opciones avanzadas:
- Ejecutar solo cuando el usuario ha iniciado sesión o no
- Ejecutar con privilegios elevados
- Configurar condiciones (ej: solo si la computadora está inactiva)
- Configurar opciones de recuperación si la tarea falla
🐍 Programación desde Python
Si prefieres manejar la programación desde dentro de tu script, puedes usar bibliotecas de Python.
Usando la biblioteca schedule
La biblioteca schedule
ofrece una forma sencilla de programar tareas:
import schedule
import time
def job():
print("Ejecutando tarea...")
# Tu código aquí
# Programar la tarea para ejecutarse cada día a las 10:30
schedule.every().day.at("10:30").do(job)
# Programar para ejecutarse cada hora
schedule.every().hour.do(job)
# Programar para ejecutarse cada 5 minutos
schedule.every(5).minutes.do(job)
# Programar para ejecutarse cada lunes
schedule.every().monday.do(job)
# Bucle principal para mantener el programa ejecutándose
while True:
schedule.run_pending()
time.sleep(1)
Para usar schedule
, instálalo con pip:
# Instalar la biblioteca schedule
# pip install schedule
Nota importante: Para que schedule
funcione, tu script debe estar ejecutándose continuamente. Esto lo hace más adecuado para servicios que ya están en ejecución constante, no como reemplazo de cron o Task Scheduler.
Usando APScheduler
Para necesidades más avanzadas, APScheduler ofrece más flexibilidad:
from apscheduler.schedulers.blocking import BlockingScheduler
def job():
print("Ejecutando tarea...")
# Tu código aquí
scheduler = BlockingScheduler()
# Programar para ejecutarse cada día a las 10:30
scheduler.add_job(job, 'cron', hour=10, minute=30)
# Programar para ejecutarse cada 5 minutos
scheduler.add_job(job, 'interval', minutes=5)
# Iniciar el scheduler
scheduler.start()
Para usar APScheduler, instálalo con pip:
# Instalar la biblioteca APScheduler
# pip install apscheduler
🔄 Combinando despliegue en la nube y programación de tareas
La combinación perfecta para la automatización completa es:
- Desplegar tu script en un servidor en la nube (como vimos en la sección anterior)
- Programar su ejecución con cron (en el servidor)
Ejemplo completo para un script de backup automático:
# En el servidor (después de subir tu script)
cd /opt/myscripts
# Crear entorno virtual e instalar dependencias
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Editar crontab
crontab -e
# Añadir esta línea para ejecutar el script todos los días a las 3 AM
0 3 * * * cd /opt/myscripts && source venv/bin/activate && python backup_script.py >> /opt/myscripts/logs/backup.log 2>&1
🔍 Comprueba tu comprensión
- ¿Qué significa la siguiente expresión cron:
0 */2 * * *
? - ¿Por qué es importante especificar rutas absolutas en las tareas de cron?
- ¿Cuál es la diferencia entre usar cron y la biblioteca
schedule
de Python? - ¿Cómo capturarías los errores de un script programado con cron?
- ¿Qué consideraciones debes tener al programar tareas que se ejecutan durante la noche?
🛠️ Ejercicio práctico
Toma el script de copias de seguridad automáticas que creamos en el capítulo anterior y configúralo para que se ejecute automáticamente:
-
En Linux/macOS:
- Configura una tarea cron para ejecutar el script todos los días a las 2 AM
- Asegúrate de que los logs se guarden en un archivo
-
En Windows:
- Usa el Programador de tareas para ejecutar el script todos los días a las 2 AM
- Configura opciones para que se ejecute incluso si el usuario no ha iniciado sesión
-
Usando Python:
- Modifica el script para usar
schedule
oAPScheduler
- Configúralo para ejecutarse cada 24 horas
- Modifica el script para usar
📝 Resumen
En esta sección, has aprendido:
- Cómo programar tareas automáticas en diferentes sistemas operativos
- La sintaxis y uso de cron en sistemas Linux/Unix
- Cómo configurar el Programador de tareas en Windows
- Opciones para programar tareas desde dentro de tus scripts Python
- Cómo combinar el despliegue en la nube con la programación de tareas
Con estos conocimientos, puedes crear sistemas de automatización completos que funcionen de forma autónoma, ejecutándose en los momentos precisos sin intervención manual.
En la siguiente sección, aprenderemos sobre monitoreo y mantenimiento para asegurarnos de que nuestros scripts automatizados sigan funcionando correctamente a largo plazo.