在Windows和Linux中都开启定时任务
通过维护一个文件的先后顺序,让二者产生联系
Windwos
Windows中的定时任务需要在任务计划程序
中,新增设置
在设置执行程序的时候,要注意上面是Python.exe的绝对路径,下面是需要执行的文件的绝对路径
在Windows中的定时任务,我们可以直接通过手动执行的方式完成测试
在Windows中使用Celery的时候,需要注意:
# 安装Celery
pip3 install celery
# celery 不支持在 windows 下运行任务,需要借助 eventlet 来完成
pip3 install eventlet
# -c 是协程的数量,生产环境可以用 1000
celery -A main worker -l info -P eventlet -c 10
Linux
Linux中的定时任务,分为两种情况:系统中使用、Django项目调用。
当我们在系统中使用启动定时任务的时候:
# 直接在任意位置,编辑一个定时任务的文件,在命令行直接启动
[root@localhost ~]# crontab [选项]
选项:
-e: 编辑crontab定时任务
-l: 查询crontab任务
-r: 删除当前用户所有的crontab任务
当我们使用Django做项目集成的时候:
- 在项目的settings.py文件中,定义定时任务的参数
# 子应用
INSTALLED_APPS = [
... ...
'django_crontab', # 定时任务
... ...
]
# 定时任务参数
CRONJOBS = (
# 初级模式
('*/5 * * * *', 'myproject.myapp.cron.my_scheduled_job'),
# 中级模式
('*/1 * * * *', 'crontab_celery.cron_tasks.linux_crontab', f'>> {os.path.join(BASE_DIR, "logs/crontab.log")}'),
('*/1 * * * *', 'crontab_celery.file.tasks.file_calculate', f'>> {os.path.join(BASE_DIR, "logs/crontab.log")}'),
('* * * * * sleep 10;', 'crontab_celery.cron_tasks.test_crontab', f'>> {os.path.join(BASE_DIR, "logs/crontab.log")}'),
# 定时执行命令
('*/1 * * * *', 'django.core.management.call_command', ['celery -A crontab_celery.main worker -l info'], f'>> {os.path.join(BASE_DIR, "logs/celery.log")}'),
# 高级模式
('0 0 * * 0', 'django.core.management.call_command', ['dumpdata', 'auth'], {'indent': 4}, '> /home/john/backups/last_sunday_auth_backup.json'),
)
- 在项目路径中,与manager.py同级位置
# 添加定时任务到系统中
python manage.py crontab add
# 显示已经激活的定时任务
python manage.py crontab show
# 移除定时任务
python manage.py crontab remove
- BUG
# 解决crontab中文问题
CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'
Linux中的Celery同Windows类似,在指定的文件路径下,启动celery即可
celery -A crontab_celery.main worker -l info
启动后效果如下:
评论区