Configurar un Trabajo Cron
Python Automation Cookbook — Programación de Tareas en Unix/Linux
Cron es una forma antigua pero confiable de ejecutar comandos. Ha existido desde la década de 1970 en Unix, y es un favorito de la vieja escuela en administración de sistemas para realizar tareas de mantenimiento como liberar espacio en disco, rotar archivos de registro, hacer copias de seguridad y otras operaciones comunes y repetitivas.
Esta receta es específica para sistemas operativos Unix y similares a Unix, por lo que funcionará en Linux y macOS. En Windows se usa el Task Scheduler, que no se cubrirá aquí.
Ventajas y Desventajas
Ventajas
Desventajas
Script para Cron
import argparse import sys from datetime import datetime import configparser def main(number, other_number, output): result = number * other_number print(f'[{datetime.utcnow().isoformat()}] The result is {result}', file=output) if __name__ == '__main__': parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--config', '-c', type=argparse.FileType('r'), help='config file', default='/etc/automate.ini') parser.add_argument('-o', dest='output', type=argparse.FileType('w'), help='output file', default=sys.stdout) args = parser.parse_args() if args.config: config = configparser.ConfigParser() config.read_file(args.config) args.n1 = int(config['ARGUMENTS']['n1']) args.n2 = int(config['ARGUMENTS']['n2']) main(args.n1, args.n2, args.output)
Configurar el Cron Job
Paso 1: Obtener Ruta del Intérprete
Paso 2: Probar el Comando Completo
$ /your/path/.venv/bin/python /your/path/cron.py -o /path/automate.log
Paso 3: Editar Crontab
# Ejecutar cada 5 minutos
*/5 * * * * /your/path/.venv/bin/python /your/path/cron.py -o /path/automate.log
Paso 4: Verificar y Monitorear
[2020-01-17 21:25:01.174835] The result is 35
[2020-01-17 21:30:00.886452] The result is 35
Formato Crontab
La línea del crontab consiste en seis elementos que describen cuándo ejecutar la tarea, seguidos del comando a ejecutar:
* * * * * * | | | | | | | | | | | +-- Año (rango: 1900-3000) | | | | +---- Día de la Semana (rango: 1-7, 1 = Lunes) | | | +------ Mes del Año (rango: 1-12) | | +-------- Día del Mes (rango: 1-31) | +---------- Hora (rango: 0-23) +------------ Minuto (rango: 0-59)
Ejemplos Comunes
| Expresión | Significado |
|---|---|
30 15 * * * * |
Todos los días a las 15:30 |
30 * * * * * |
Cada hora, a los 30 minutos |
0,30 * * * * * |
Cada hora, a los 0 y 30 minutos |
*/30 * * * * * |
Cada media hora |
0 0 * * 1 * |
Cada Lunes a las 00:00 |
*/5 * * * * * |
Cada 5 minutos |
Rutas Completas
La tarea debe describirse con todas las rutas completas para cada archivo relacionado:
- ✦ El intérprete de Python
- ✦ El script a ejecutar
- ✦ El archivo de salida