From b9f292280b97d0911f2f4118954617d20061f2a2 Mon Sep 17 00:00:00 2001 From: Bram Date: Sun, 24 May 2026 13:48:27 +0200 Subject: [PATCH] Refactor EPG scheduling: replace CRON_SCHEDULE with GRAB_INTERVAL_HOURS for improved interval-based grabbing and add lock mechanism to prevent concurrent executions. --- Dockers/iptv-epg/Dockerfile | 4 ++-- Dockers/iptv-epg/entrypoint.sh | 32 +++++++++++++++----------------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/Dockers/iptv-epg/Dockerfile b/Dockers/iptv-epg/Dockerfile index 0db6b8c..6fa99fc 100644 --- a/Dockers/iptv-epg/Dockerfile +++ b/Dockers/iptv-epg/Dockerfile @@ -1,7 +1,7 @@ FROM node:20-alpine # Install required packages -RUN apk add --no-cache git curl unzip coreutils dcron +RUN apk add --no-cache git curl unzip coreutils # Set working directory WORKDIR /app @@ -22,7 +22,7 @@ RUN chmod +x /app/entrypoint.sh EXPOSE 3000 # Set environment variables with defaults -ENV CRON_SCHEDULE="0 0,12 * * *" \ +ENV GRAB_INTERVAL_HOURS=12 \ SITES="" \ MAX_CONNECTIONS=10 \ DAYS="" \ diff --git a/Dockers/iptv-epg/entrypoint.sh b/Dockers/iptv-epg/entrypoint.sh index 596a86e..b17da09 100644 --- a/Dockers/iptv-epg/entrypoint.sh +++ b/Dockers/iptv-epg/entrypoint.sh @@ -56,6 +56,11 @@ grab_epg() { } if [ "$1" = "grab" ]; then + if ! mkdir /tmp/epg-grab.lock 2>/dev/null; then + echo "EPG grab already running, skipping" + exit 0 + fi + trap 'rmdir /tmp/epg-grab.lock 2>/dev/null || true' EXIT INT TERM grab_epg exit 0 fi @@ -67,24 +72,17 @@ if [ -n "$SITES" ]; then grab_epg fi -if [ -n "$CRON_SCHEDULE" ] && [ -n "$SITES" ]; then - echo "Setting up cron job with schedule: $CRON_SCHEDULE" - # Cron runs with a minimal env — bake grab-related vars into a wrapper script. - { - echo '#!/bin/sh' - echo 'cd /app' - for var in SITES OUTPUT MAX_CONNECTIONS DAYS TIMEOUT DELAY LANG PROXY GZIP JSON CURL; do - eval "val=\$$var" - if [ -n "$val" ]; then - printf "export %s='%s'\n" "$var" "$(printf '%s' "$val" | sed "s/'/'\\\\''/g")" - fi +if [ -n "$SITES" ] && [ "${GRAB_INTERVAL_HOURS:-0}" -gt 0 ] 2>/dev/null; then + echo "Scheduling EPG grab every ${GRAB_INTERVAL_HOURS} hours" + ( + while true; do + sleep $((GRAB_INTERVAL_HOURS * 3600)) + echo "Starting scheduled EPG grab at $(date -u '+%Y-%m-%d %H:%M:%S UTC' 2>/dev/null || date)" + /app/entrypoint.sh grab done - echo 'exec /app/entrypoint.sh grab' - } >/app/run-grab.sh - chmod +x /app/run-grab.sh - echo "$CRON_SCHEDULE /app/run-grab.sh >> /proc/1/fd/1 2>&1" >/etc/crontabs/root - chmod 600 /etc/crontabs/root - crond -b -l 2 + ) & +elif [ -n "$CRON_SCHEDULE" ]; then + echo "WARNING: CRON_SCHEDULE is deprecated, use GRAB_INTERVAL_HOURS instead (ignored)" fi echo "Starting server on port 3000 to serve EPG files from /app/guides"