#!/usr/bin/env bash # Kjører oppgaver sekvensielt til ingen flere er tilgjengelige. # Venter mellom sesjoner. Stopper når alt er gjort, blokkert, eller trenger avklaring. # Ved API-feil (500/529) venter scriptet og prøver igjen automatisk. # # Bruk: # ./scripts/run-tasks.sh # kjør til ferdig/blokkert # ./scripts/run-tasks.sh --interval 60 # 60 sek mellom oppgaver (default: 30) set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" INTERVAL=30 MAX_API_RETRIES=10 API_RETRY_DELAY=60 # sekunder mellom retries ved API-feil while [[ $# -gt 0 ]]; do case $1 in --interval) INTERVAL=$2; shift 2 ;; *) echo "Ukjent flagg: $1"; exit 1 ;; esac done cd "$ROOT" completed=0 api_failures=0 while true; do # Sjekk om det finnes noe å gjøre dry_output=$(./scripts/run-next-task.sh --dry 2>&1) if echo "$dry_output" | grep -q "Alle oppgaver er gjort"; then echo "" echo "=== Alle oppgaver er gjort! ($completed fullført i denne kjøringen) ===" ./scripts/run-next-task.sh --status break fi if echo "$dry_output" | grep -q "Ingen tilgjengelige"; then echo "" echo "=== Ingen tilgjengelige oppgaver. ($completed fullført i denne kjøringen) ===" echo "Gjenstående oppgaver er blokkert, har åpne spørsmål, eller venter på pågående arbeid." echo "" ./scripts/run-next-task.sh --status break fi echo "$dry_output" echo "" # Kjør oppgaven ./scripts/run-next-task.sh exit_code=$? if [[ $exit_code -eq 0 ]]; then ((completed++)) api_failures=0 # Nullstill ved suksess echo "" echo "--- Oppgave ferdig (#$completed). Neste om ${INTERVAL}s (Ctrl-C for å stoppe) ---" echo "" sleep "$INTERVAL" else # Sjekk om oppgaven ble tilbakestilt (typisk API-feil/krasj) # vs. om den ble markert [?] eller [!] (bevisst blokkering) status_output=$(./scripts/run-next-task.sh --dry 2>&1) if echo "$status_output" | grep -q "Ingen tilgjengelige\|Alle oppgaver er gjort"; then # Oppgaven ble blokkert [?]/[!], eller alt er gjort — stopp echo "" echo "--- Sesjon feilet og ingen oppgaver tilgjengelig. Stopper. ---" ./scripts/run-next-task.sh --status break fi # Oppgaven ble tilbakestilt til [ ] — sannsynligvis API-feil ((api_failures++)) if [[ $api_failures -ge $MAX_API_RETRIES ]]; then echo "" echo "--- $MAX_API_RETRIES feil på rad. Stopper. ---" ./scripts/run-next-task.sh --status break fi delay=$((API_RETRY_DELAY * api_failures)) # Lineær backoff: 60, 120, 180... echo "" echo "--- Sesjon feilet (exit $exit_code). Forsøk $api_failures/$MAX_API_RETRIES. Venter ${delay}s... ---" echo "" sleep "$delay" fi done