diff --git a/usr/local/bin/torrent-mover b/usr/local/bin/torrent-mover index 968f6e3..503f426 100755 --- a/usr/local/bin/torrent-mover +++ b/usr/local/bin/torrent-mover @@ -1,5 +1,32 @@ #!/bin/bash -# Torrent Mover v5.1 - Numeric Handling Fix +# Torrent Mover v5.3 - Singleton Implementation + +# Singleton pattern +LOCK_FILE="/var/lock/torrent-mover.lock" +MAX_AGE=300 # 5 minutes in seconds + +# Check for existing lock +if [ -f "${LOCK_FILE}" ]; then + PID=$(cat "${LOCK_FILE}") + + # Check if process exists + if ps -p "${PID}" > /dev/null 2>&1; then + echo "Already running (PID: ${PID}), exiting." + exit 1 + else + # Check lock file age + if [ $(($(date +%s) - $(date -r "${LOCK_FILE}" +%s))) -lt ${MAX_AGE} ]; then + echo "Recent crash detected, waiting..." + exit 1 + fi + echo "Removing stale lock (PID: ${PID})" + rm -f "${LOCK_FILE}" + fi +fi + +# Create new lock +echo $$ > "${LOCK_FILE}" +trap 'rm -f "${LOCK_FILE}"' EXIT TERM INT set -o errexit set -o nounset