У меня есть проект Django, который использует django-apscheduler со следующей конфигурацией:
Apache virtualhost
WSGIPassAuthorization On
WSGIScriptAlias / /some/app/wsgi.py
WSGIDaemonProcess some-app \
user=someapp threads=15 display-name=some-app \
python-path=/some/app/venv/lib/python3.7/site-packages
WSGIProcessGroup some-app
Запланированные задачи
from pytz import utc
from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_events, register_job
from administration.scheduled_tasks import add_db_backup, delete_old_db_backups
scheduler = BackgroundScheduler(timezone=utc)
scheduler.add_jobstore(DjangoJobStore(), 'default')
register_events(scheduler)
@register_job(scheduler, 'cron', hour='0', minute='0')
def db_backups_job():
add_db_backup()
delete_old_db_backups()
scheduler.start()
Как и ожидалось, запланированное задание отображается в Django admin.Кроме того, задания выполняются , иногда , например, вышеуказанное ежедневное задание выполнялось семь раз в течение этого месяца, хотя сегодня это 15-е и, следовательно, оно должно было выполняться 15 раз.Обратите внимание, что я перезапустил Apache в течение этого времени.
Кажется, это проблема времени жизни процесса.Кажется, что процесс mod_wsgi
приостановлен и, следовательно, задания APScheduler не могут быть запущены.
Каково время жизни процесса mod_wsgi
?Как я могу убедиться, что задания выполняются в соответствии с графиком или хотя бы ежедневно?