61 lines
1.4 KiB
Bash
Executable File
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
|