#!/bin/bash # /usr/local/bin/duo-agent-poller.sh # Sub-Agent Poller: Prüft alle 10s tasks/offen auf eigene (oder "beliebig") Tasks. # Nutzung: duo-agent-poller.sh set -euo pipefail TASKS="/srv/work/tasks" MEINE_IP="${1:?Meine ZT-IP fehlt}" MEINE_ID="${2:?Meine Agent-ID fehlt}" # Suffix: letzte 2 Oktette der ZT-IP (z.B. 172.24.34.142 -> "34.142" als Präfix) OCT=$(echo "$MEINE_IP" | awk -F. '{print $3"."$4}') for f in "$TASKS/offen"/*.json; do [ -f "$f" ] || continue ZIEL=$(python3 -c "import json;print(json.load(open('$f')).get('ziel_agent',''))" 2>/dev/null || echo "") # Nur Tasks für mich oder "beliebig" greifen if [ "$ZIEL" = "$MEINE_ID" ] || [ "$ZIEL" = "beliebig" ]; then # Atomarer Lock: mv/rename gewinnt, konfliktfrei auf NFS. NEW="$TASKS/in_arbeit/${OCT}_$(basename "$f")" if mv "$f" "$NEW" 2>/dev/null; then python3 - "$NEW" "$MEINE_ID" << 'PYEOF' import json, sys, time f, agent = sys.argv[1], sys.argv[2] t = json.load(open(f)) t["status"] = "in_arbeit" t["in_arbeit_ts"] = str(int(time.time())) t["bearbeiter"] = agent json.dump(t, open(f, "w"), indent=2) print(f"Uebernommen: {t['task_id']} von {agent}") PYEOF # Bearbeitungslogik ist agentenspezifisch — hier einhängen. fi fi done