ワンクリックで
cron-chunked-batch
Patrón para dividir tareas batch masivas en chunks procesados por cron jobs individuales con tracking de progreso.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Patrón para dividir tareas batch masivas en chunks procesados por cron jobs individuales con tracking de progreso.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Catálogo de Addy Osmani de skills engineering para AI coding agents — 8 slash commands mapeados al SDLC (spec → plan → build → test → review → ship).
Generación de informes y documentos profesionales mediante LLM. Arquitectura prompt→LLM→HTML capítulo, plantillas por sección, integración con datos de appState, y patrón demo interactivo. Aplicable a PMST, informes técnicos, auditorías, y cualquier documento estructurado.
AI Engineering Hub — catálogo de proyectos y tutoriales de ingeniería de IA con Jupyter notebooks.
AI Website Cloner — genera clonaciones de sitios web completas con IA desde una URL.
AutoScraper — scraping web automático con IA, aprende patrones de selección y extrae datos sin código.
Baidu Unlimited OCR — OCR gratuito de alta calidad sin límites de uso.
| name | cron-chunked-batch |
| version | 1.0.0 |
| description | Patrón para dividir tareas batch masivas en chunks procesados por cron jobs individuales con tracking de progreso. |
| tags | ["cron","batch","chunking","progress-tracking","automation"] |
Cuando una tarea batch (descarga, scraping, procesamiento) tarda demasiado para ejecutarse de una vez (horas, timeout), dividirla en chunks pequeños (país, archivo, entidad) y procesar un chunk por ejecución de cron. Cada ejecución lee el progreso, procesa un chunk, guarda progreso y termina.
project/
├── scripts/
│ ├── batch-worker.py # Procesa UN solo item/chunk
│ └── batch-wrapper.sh # Lee progreso, determina chunk siguiente, llama al worker
├── data/
│ ├── batch_index.json # Índice de todos los items (URLs, metadatos)
│ └── batch_progress.json # Estado de progreso (chunk actual, completado)
El worker debe:
--item XX o --pais CC)Ejemplo mínimo:
# batch-worker.py
import sys
import json
from pathlib import Path
ITEM_ID = sys.argv[1] if len(sys.argv) > 1 else None
INDEX = json.load(open("batch_index.json"))
DATA_DIR = Path("data")
if ITEM_ID not in INDEX:
print(f"❌ {ITEM_ID} no está en el índice")
sys.exit(1)
# Procesar solo este item
for año, urls in INDEX[ITEM_ID].items():
dir_path = DATA_DIR / ITEM_ID / año
dir_path.mkdir(parents=True, exist_ok=True)
for url in urls:
dest = dir_path / url.split("/")[-1]
if dest.exists():
continue # Saltar si ya existe
# Descargar/procesar...
El wrapper:
batch_progress.json para saber qué chunk tocaEjemplo mínimo:
#!/usr/bin/env bash
# batch-wrapper.sh
set -euo pipefail
cd "$(dirname "$0")/.."
PROGRESS_FILE="data/batch_progress.json"
WORKER="scripts/batch-worker.py"
# Cargar progreso
if [ -f "$PROGRESS_FILE" ]; then
CURRENT=$(python3 -c "import json; print(json.load(open('$PROGRESS_FILE')).get('actual', 0))")
DONE=$(python3 -c "import json; print(json.load(open('$PROGRESS_FILE')).get('completado', False))")
else
CURRENT=0
DONE=False
fi
# Verificar completado
if [ "$DONE" = "True" ]; then
echo "✅ Todo completado"
exit 0
fi
# Leer lista de chunks del índice
CHUNKS=($(python3 -c "import json; print('\n'.join(sorted(json.load(open('data/batch_index.json').keys()))))"))
TOTAL=${#CHUNKS[@]}
# Verificar índice
if [ "$CURRENT" -ge "$TOTAL" ]; then
echo "⚠️ Índice fuera de rango, reiniciando"
CURRENT=0
fi
CHUNK="${CHUNKS[$CURRENT]}"
NEXT=$((CURRENT + 1))
echo "▶️ Chunk: $CHUNK ($NEXT/$TOTAL)"
# Verificar si ya completo
EXISTENTES=$(find "data/$CHUNK" -name "*.pdf" 2>/dev/null | wc -l)
TOTAL_INDICE=$(python3 -c "import json; d=json.load(open('data/batch_index.json')); print(sum(len(v) for v in d.get('$CHUNK',{}).values()))")
if [ "$EXISTENTES" -ge "$TOTAL_INDICE" ] && [ "$TOTAL_INDICE" -gt 0 ]; then
echo "✅ $CHUNK ya completo"
else
# Ejecutar worker
python3 "$WORKER" "$CHUNK"
fi
# Guardar progreso
cat > "$PROGRESS_FILE" <<EOF
{
"chunks": [$(printf '"%s",' "${CHUNKS[@]}" | sed 's/,$//')],
"actual": $NEXT,
"completado": $([ "$NEXT" -ge "$TOTAL" ] && echo "True" || echo "False"),
"ultima_ejecucion": "$(date -u '+%Y-%m-%d %H:%M UTC')",
"chunk_procesado": "$CHUNK"
}
EOF
echo "💾 Progreso: $NEXT/$TOTAL"
no_agent: true # Ejecuta directo, sin LLM
schedule: "every 1h" # Frecuencia entre chunks
repeat: N # Máximo de ejecuciones (>= número de chunks)
deliver: local # Resultados a archivos
script: batch-wrapper.sh # El wrapper
Importante con no_agent: true:
/hermes-home/scripts/ (no el workspace)cd al directorio del proyecto al inicio{
"chunks": ["AT", "BE", "BG", "CH", "CZ", "DE"],
"actual": 3,
"completado": false,
"ultima_ejecucion": "2026-07-08T12:30:00Z",
"chunk_procesado": "BG",
"pdfs_existentes": 57,
"status": "SUCCESS"
}
no_agent: true cambia el working directory: El cron ejecuta desde /hermes-home/scripts/, no desde el workspace. Siempre usar paths absolutos y hacer cd al inicio del wrapper.scripts/descargar_todos_era.py (worker), scripts/eravisor-wrapper.sh (wrapper), Data/indice_era.json (índice), Data/eravisor_progress.json (progreso)