我有一个使用django-apscheduler且配置如下的Django项目:
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中可见。此外,作业有时会执行 ,例如,上述日常作业在本月已执行了7次,尽管今天是15日,因此应该执行了15次。请注意,在此期间我已经重新启动了Apache。
这似乎是过程生命周期的问题。看来mod_wsgi
进程已暂停,因此APScheduler作业无法运行。
mod_wsgi
进程的生命周期是多少?如何确保作业按计划执行或至少每天执行一次?