auto restart beat after 1h, #967

This commit is contained in:
Simon 2025-06-03 23:03:13 +07:00
parent d196d2e4f5
commit 8c59d65ee5
No known key found for this signature in database
GPG Key ID: 2C15AA5E89985DD4
3 changed files with 43 additions and 3 deletions

View File

@ -70,6 +70,7 @@ RUN sed -i 's/^user www\-data\;$/user root\;/' /etc/nginx/nginx.conf
COPY ./backend /app COPY ./backend /app
COPY ./docker_assets/run.sh /app COPY ./docker_assets/run.sh /app
COPY ./docker_assets/backend_start.py /app COPY ./docker_assets/backend_start.py /app
COPY ./docker_assets/beat_auto_spawn.sh /app
COPY --from=node-builder ./frontend/dist /app/static COPY --from=node-builder ./frontend/dist /app/static

View File

@ -0,0 +1,32 @@
#!/bin/bash
# auto restart beat scheduler
# https://github.com/celery/django-celery-beat/issues/894
if [[ -n "$DJANGO_DEBUG" ]]; then
LOGLEVEL="DEBUG"
else
LOGLEVEL="INFO"
fi
COMMAND="celery -A task beat --loglevel=$LOGLEVEL --scheduler django_celery_beat.schedulers:DatabaseScheduler"
TIMEOUT=3600
while true; do
echo "Starting process beat scheduler"
$COMMAND &
PID=$!
sleep $TIMEOUT
# Kill the process if still running
if kill -0 $PID 2>/dev/null; then
echo "Killing beat process after $TIMEOUT seconds"
kill $PID
# Wait a bit to allow graceful shutdown, then force kill if needed
sleep 10
kill -9 $PID 2>/dev/null
fi
echo "Restarting beat..."
done

View File

@ -3,6 +3,12 @@
set -e set -e
if [[ -n "$DJANGO_DEBUG" ]]; then
LOGLEVEL="DEBUG"
else
LOGLEVEL="INFO"
fi
# stop on pending manual migration # stop on pending manual migration
python manage.py ta_stop_on_error python manage.py ta_stop_on_error
@ -18,10 +24,11 @@ python manage.py ta_startup
# start all tasks # start all tasks
nginx & nginx &
celery -A task.celery worker \ celery -A task.celery worker \
--loglevel=INFO \ --loglevel=$LOGLEVEL \
--concurrency 4 \ --concurrency 4 \
--max-tasks-per-child 5 \ --max-tasks-per-child 5 \
--max-memory-per-child 150000 & --max-memory-per-child 150000 &
celery -A task beat --loglevel=INFO \
--scheduler django_celery_beat.schedulers:DatabaseScheduler & ./beat_auto_spawn.sh &
python backend_start.py python backend_start.py