Skip to content

Scheduled Tasks (Cron Jobs)

Scheduled (cron) jobs run on the host and execute Django management commands inside the server container via docker exec. Because Django 6.0's native task framework has no built-in scheduler (only the db_worker for enqueued tasks), all periodic maintenance is driven by host cron.

Production cron jobs

Cron name Schedule Command Purpose
ses-cleanup-remote-seats daily 03:00 cleanup_remote_seats Release remote-app seats left behind by closed/purged sessions
ses-prewarm-due-exams every 5 min prewarm_due_exams Batch-provision remote-app seats for exams starting soon
ses-import-ems-exams every 5 min import_ems_exams --scheduled Poll external EMS environments for new/updated exams
ses-cleanup-sso-sessions daily 04:00 cleanup_expired_sso_sessions Remove expired SSO sessions and refresh tokens
ses-cleanup-db-task-results daily 04:05 prune_db_task_results --min-age-days 14 --failed-min-age-days 45 Purge finished task results (see Background Tasks)

Each job appends its output to a log under /var/log (e.g. ses-cleanup.log, ses-task-prune.log).

The background task worker (python manage.py db_worker) is a long-running service started by Docker, not a cron job.