#!/bin/bash set -euo pipefail umask 077 PLUGIN_DIR="$(cd "$(dirname "$0")/.." && pwd)" DATA_DIR="$PLUGIN_DIR/data" JOB_DIR="$DATA_DIR/jobs/pending" PROCESSING_DIR="$DATA_DIR/jobs/processing" DONE_DIR="$DATA_DIR/jobs/done" LOCK_DIR="$DATA_DIR/lock" PID_DIR="$DATA_DIR/pids" CANCEL_DIR="$DATA_DIR/cancel" mkdir -p "$JOB_DIR" "$PROCESSING_DIR" "$DONE_DIR" "$PID_DIR" "$CANCEL_DIR" if ! mkdir "$LOCK_DIR" 2>/dev/null; then exit 0 fi cleanup() { rmdir "$LOCK_DIR" 2>/dev/null || true } trap cleanup EXIT JOB_FILE=$(ls -1 "$JOB_DIR"/*.env 2>/dev/null | head -n 1) if [ -z "${JOB_FILE:-}" ]; then exit 0 fi BASE_NAME="$(basename "$JOB_FILE")" RUN_FILE="$PROCESSING_DIR/$BASE_NAME" chmod 600 "$JOB_FILE" 2>/dev/null || true mv "$JOB_FILE" "$RUN_FILE" chmod 600 "$RUN_FILE" 2>/dev/null || true JOB_ID="${BASE_NAME%.env}" PID_FILE="$PID_DIR/${JOB_ID}.pid" set +e "$PLUGIN_DIR/scripts/restore.sh" "$RUN_FILE" & RESTORE_PID=$! echo "PID=${RESTORE_PID}" >> "$RUN_FILE" chmod 600 "$RUN_FILE" 2>/dev/null || true echo "${RESTORE_PID}" > "$PID_FILE" wait "$RESTORE_PID" EXIT_CODE=$? set -e rm -f "$PID_FILE" CANCEL_FLAG="${CANCEL_DIR}/${JOB_ID}.flag" if [ -f "$CANCEL_FLAG" ]; then rm -f "$CANCEL_FLAG" mv "$RUN_FILE" "$DONE_DIR/${BASE_NAME}.cancel" elif [ "$EXIT_CODE" -eq 0 ]; then mv "$RUN_FILE" "$DONE_DIR/${BASE_NAME}.ok" else mv "$RUN_FILE" "$DONE_DIR/${BASE_NAME}.fail" fi exit 0