库
虽然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 BlockingScheduler
from apps.account.scheduler.sync_user import sync_users # 这里的函数是你要执行的定时任务
from apps.host.task import sync_ssh
class 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 sysscheduler
autostart = true
stdout_logfile = /var/log/spug-scheduler.log
redirect_stderr = true
environment=DJANGO_RUN_MODE="PROD"