65 lines
1.8 KiB
Bash
Executable File
65 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Lockfile helper for doorbell build harness
|
|
# Source this from mise tasks
|
|
|
|
LOCKFILE="/tmp/doorbell-${BOARD:-esp32-32e-4}.lock"
|
|
|
|
acquire_lock() {
|
|
if [ -f "$LOCKFILE" ]; then
|
|
OLD_PID=$(cat "$LOCKFILE" 2>/dev/null)
|
|
if [ -n "$OLD_PID" ] && kill -0 "$OLD_PID" 2>/dev/null; then
|
|
if [ "${FORCE:-}" = "1" ]; then
|
|
echo "Force: Killing existing process (PID: $OLD_PID)..."
|
|
kill "$OLD_PID" 2>/dev/null
|
|
sleep 1
|
|
kill -9 "$OLD_PID" 2>/dev/null
|
|
echo "Killed PID $OLD_PID"
|
|
else
|
|
echo "Error: Another instance is running (PID: $OLD_PID)"
|
|
echo "Kill with: mise run kill BOARD=$BOARD"
|
|
echo "Or force with: FORCE=1 mise run $TASK_NAME BOARD=$BOARD"
|
|
return 1
|
|
fi
|
|
else
|
|
echo "Stale lockfile found, removing..."
|
|
rm -f "$LOCKFILE"
|
|
fi
|
|
fi
|
|
trap 'rm -f "$LOCKFILE"' EXIT
|
|
echo "$$" > "$LOCKFILE"
|
|
echo "Acquired lock: $LOCKFILE (PID: $$)"
|
|
return 0
|
|
}
|
|
|
|
release_lock() {
|
|
rm -f "$LOCKFILE"
|
|
}
|
|
|
|
kill_locked() {
|
|
if [ ! -f "$LOCKFILE" ]; then
|
|
echo "No lockfile found: $LOCKFILE"
|
|
return 1
|
|
fi
|
|
|
|
OLD_PID=$(cat "$LOCKFILE" 2>/dev/null)
|
|
if [ -z "$OLD_PID" ]; then
|
|
echo "Lockfile is empty, removing..."
|
|
rm -f "$LOCKFILE"
|
|
return 0
|
|
fi
|
|
|
|
if kill -0 "$OLD_PID" 2>/dev/null; then
|
|
echo "Killing PID $OLD_PID..."
|
|
kill "$OLD_PID" 2>/dev/null
|
|
sleep 1
|
|
if kill -0 "$OLD_PID" 2>/dev/null; then
|
|
echo "Force killing PID $OLD_PID..."
|
|
kill -9 "$OLD_PID" 2>/dev/null
|
|
fi
|
|
echo "Killed PID $OLD_PID"
|
|
else
|
|
echo "Process $OLD_PID not running (stale lockfile)"
|
|
fi
|
|
rm -f "$LOCKFILE"
|
|
echo "Lockfile removed"
|
|
} |