Files
2026-07-04 11:20:44 +02:00

61 lines
1.4 KiB
Bash
Executable File

#!/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