@@ -6,17 +6,65 @@ CELERY_APP=${CELERY_APP:-"geonode.celery_app:app"}
66CELERY__STATE_DB=${CELERY__STATE_DB:- " /mnt/volumes/statics/worker@%h.state" }
77# expressed in KB
88CELERY__MAX_MEMORY_PER_CHILD=${CELERY__MAX_MEMORY_PER_CHILD:- " 200000" }
9- CELERY__AUTOSCALE_VALUES=${CELERY__AUTOSCALE_VALUES:- " 15,10 " }
9+ CELERY__AUTOSCALE_VALUES=${CELERY__AUTOSCALE_VALUES:- " 10,5 " }
1010CELERY__MAX_TASKS_PER_CHILD=${CELERY__MAX_TASKS_PER_CHILD:- " 10" }
11- CELERY__OPTS=${CELERY__OPTS:- " --without-gossip --without-mingle -Ofair -B -E" }
12- CELERY__BEAT_SCHEDULE=${CELERY__BEAT_SCHEDULE:- " celery.beat:PersistentScheduler" }
13- CELERY__LOG_LEVEL=${CELERY__LOG_LEVEL:- " INFO" }
11+ CELERY__OPTS=${CELERY__OPTS:- " --without-gossip --without-mingle -Ofair -E" }
12+ CELERY__LOG_LEVEL=${CELERY__LOG_LEVEL:- " ERROR" }
1413CELERY__LOG_FILE=${CELERY__LOG_FILE:- " /var/log/celery.log" }
1514CELERY__WORKER_NAME=${CELERY__WORKER_NAME:- " worker1@%h" }
1615CELERY__WORKER_CONCURRENCY=${CELERY__WORKER_CONCURRENCY:- " 4" }
1716
17+ # Celery beat settings
18+ CELERY__BEAT_SCHEDULE=${CELERY__BEAT_SCHEDULE:- " celery.beat:PersistentScheduler" }
19+ CELERY__BEAT_LOG=${CELERY__BEAT_LOG:- " /var/log/celery_beat.log" }
20+
21+ # Harvester settings
22+ CELERY__HARVESTER_WORKER_NAME=${CELERY__HARVESTER_WORKER_NAME:- " harvesting_worker@%h" }
23+ CELERY__HARVESTER_CONCURRENCY=${CELERY__HARVESTER_CONCURRENCY:- " 10" }
24+ CELERY__HARVESTER_AUTOSCALE_VALUES=${CELERY__HARVESTER_AUTOSCALE_VALUES:- " 15,10" }
25+ CELERY__HARVESTER_MAX_MEMORY_PER_CHILD=${CELERY__MAX_MEMORY_PER_CHILD:- " 500000" }
26+
27+ # --- FIX: Remove stale Beat pidfile before starting beat ---
28+ BEAT_PIDFILE=" /tmp/celerybeat.pid"
29+
30+ if [ -f " $BEAT_PIDFILE " ]; then
31+ PID=$( cat " $BEAT_PIDFILE " 2> /dev/null)
32+
33+ # If PID exists and is running → warn but continue (avoid killing)
34+ if kill -0 " $PID " 2> /dev/null; then
35+ echo " WARNING: Celery Beat seems to be running already (PID $PID ). Removing stale pidfile anyway."
36+ else
37+ echo " Removing stale Celery Beat pidfile: $BEAT_PIDFILE "
38+ fi
39+
40+ rm -f " $BEAT_PIDFILE "
41+ fi
42+ # --- END FIX ---
43+
44+ echo " Starting Celery Beat..."
45+ $CELERY_BIN -A $CELERY_APP beat --scheduler=$CELERY__BEAT_SCHEDULE \
46+ --loglevel=$CELERY__LOG_LEVEL -f $CELERY__BEAT_LOG --pidfile=/tmp/celerybeat.pid &
47+
48+ echo " Starting Default Celery Worker..."
1849$CELERY_BIN -A $CELERY_APP worker --autoscale=$CELERY__AUTOSCALE_VALUES \
1950 --max-memory-per-child=$CELERY__MAX_MEMORY_PER_CHILD $CELERY__OPTS \
20- --statedb=$CELERY__STATE_DB --scheduler= $CELERY__BEAT_SCHEDULE \
51+ --statedb=$CELERY__STATE_DB \
2152 --loglevel=$CELERY__LOG_LEVEL -n $CELERY__WORKER_NAME -f $CELERY__LOG_FILE \
22- --concurrency=$CELERY__WORKER_CONCURRENCY --max-tasks-per-child=$CELERY__MAX_TASKS_PER_CHILD
53+ --concurrency=$CELERY__WORKER_CONCURRENCY --max-tasks-per-child=$CELERY__MAX_TASKS_PER_CHILD \
54+ -X harvesting &
55+
56+ echo " Starting Harvester Celery Worker..."
57+ $CELERY_BIN -A $CELERY_APP worker -Q harvesting \
58+ --autoscale=$CELERY__HARVESTER_AUTOSCALE_VALUES \
59+ --max-memory-per-child=$CELERY__HARVESTER_MAX_MEMORY_PER_CHILD \
60+ --loglevel=$CELERY__LOG_LEVEL \
61+ -n $CELERY__HARVESTER_WORKER_NAME \
62+ --concurrency=$CELERY__HARVESTER_CONCURRENCY \
63+ -f $CELERY__LOG_FILE &
64+
65+ # Wait for any process to exit
66+ wait -n
67+
68+ # Exit with the status of the process that exited first
69+ # Docker will restart the container if this is non-zero (i.e., a failure)
70+ exit $?
0 commit comments