库
虽然celery-beat更老牌.但是实际用下来故障更多一些.我一般会用schedulerAPScheduler==3.6.3
文档
https://apscheduler.readthedocs.io/en/3.x/
使用
这里使用django的自定义命令来启动定时任务(可以方便的使用django的orm),并使用supervisor管理.
app/management/commands/sysscheduler.py←最后的文件名就是你的自定义命令名.前面的app可以是项目中的任意一个app.
from apscheduler.schedulers.background import BlockingSchedulerfrom apps.account.scheduler.sync_user import sync_users # 这里的函数是你要执行的定时任务from apps.host.task import sync_sshclass Command(BaseCommand):def handle(self, *args, **options):scheduler = BlockingScheduler(executors={'default': ThreadPoolExecutor(20),'processpool': ProcessPoolExecutor(20)},job_defaults={'coalesce': False,'max_instances': 20})# 计划任务scheduler.add_job(sync_users, 'cron', hour='1', id='sync_users_cron', max_instances=1)# 周期任务scheduler.add_job(sync_ssh, 'interval', hours=4, id='sync_ssh', max_instances=1)scheduler.start()
对应的supervisor配置文件
[program:spug-scheduler]directory = /opt/project #django项目的根目录command = /opt/venv/bin/python manage.py sysschedulerautostart = truestdout_logfile = /var/log/spug-scheduler.logredirect_stderr = trueenvironment=DJANGO_RUN_MODE="PROD"
