Comments (12)
我不知道那位老哥是怎么做到打印出Heap的。我觉得可能他修改了下Celery的源码。
所以要打印,可参考下我hack celery的笔记,在哪多加一个print什么的:
https://github.com/AngelLiang/hacking-celery/blob/hacking_v4.2.1/celery/beat.py#L278
然后简单看了下日志,crontab确实都没send task。我暂时想到:
- 可检查数据库看看是不是被禁用了?(
PeriodicTask.enabled
字段)。 - 可考虑多加一个
IntervalSchedule
定时任务看看是不是可以触发? - 作为对比和排除,可以用celery官方的定时beat scheduler试试,看看是否一切正常。
examples下面的代码是可以执行的话,也请麻烦多对比下两边的代码有哪些不同了。
from celery-sqlalchemy-scheduler.
上面我使用得是MySQL,我使用sqlite,写入任务时会报错,
sqlalchemy.exc.InterfaceError
sqlalchemy.exc.InterfaceError: (sqlite3.InterfaceError) Error binding parameter 5 - probably unsupported type.
[SQL: INSERT INTO celery_crontab_schedule (minute, hour, day_of_week, day_of_month, month_of_year, timezone) VALUES (?, ?, ?, ?, ?, ?)]
[parameters: ('1', '', '', '', '', <DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>)]
(Background on this error at: http://sqlalche.me/e/rvf5)
from celery-sqlalchemy-scheduler.
反馈已收到。
from celery-sqlalchemy-scheduler.
请告诉我下你的环境。
- Linux版本
- Python版本
- celery版本
- MySQL版本
- celery-sqlalchemy-scheduler版本
等等。我这边好复现你的bug。
from celery-sqlalchemy-scheduler.
- 环境(我猜测和环境因素关系不大
Linux:CentOS7_x64,Linux version 3.10.0-862.3.2.el7.x86_64 ([email protected])
Python 3.7.0 + celery 4.3.0 + MySQL 5.7.23
celery-sqlalchemy-scheduler就是今天2019-8-26通过pipenv install刚安装的 - 复现步骤
- 选项配置
CELERYBEAT_MAX_LOOP_INTERVAL = 10
CELERYBEAT_SCHEDULER = 'celery_sqlalchemy_scheduler.schedulers:DatabaseScheduler' - 实例化celery为ce
ce.conf.update( { 'beat_dburi': 'mysql://root:xxxx@xxx:3306/celery-schedule', # 'sqlite:///schedule.db' 'timezone': 'Asia/Shanghai' } )
- 建库
启动celery worker、celery beat(教程中的方法CREATE DATABASE /*!32312 IF NOT EXISTS*/`celery-schedule` /*!40100 DEFAULT CHARACTER SET utf8 */;
4. 就是按照那个步骤来的,唯一的区别就是mysql连接中我没有connector,我感觉这个不影响。最重要的问题就是写入到数据库中了,celery beat也感受到变化了,但是不send,有什么调试手段吗?我这代码都没写在一块儿,不太好贴代码。 - 选项配置
from celery-sqlalchemy-scheduler.
我晚点写个简化的测试代码试一下,我是直接把代码抄到项目中了。
from celery-sqlalchemy-scheduler.
和环境没关系,我尝试了你examples文件夹下的tasks.py文件,是可以正常运行timedelta和crontab的,我自己拆开就不行了,晕,感觉哪儿少了点东西,又找不到。
感觉真得是非常奇怪,celery beat正常执行时,会把scheduler的任务写进数据库,使用session也可以添加任务到数据库,但是celery beat就是不触发send task
from celery-sqlalchemy-scheduler.
“我尝试了你examples文件夹下的tasks.py文件,是可以正常运行timedelta和crontab的”——这个我就放心了。
“自己拆开就不行了”——可以从时区角度排查一下,时区这一块我处理得不是很好。之前一位老哥帮我修复过bug了。
另外不知道你试过把'-l info'换为-l debug
这个参数没有?可以打印出更多信息。
再不行,试试把定时调度的那个heap打印出来看看。参见:
#2 (comment)
from celery-sqlalchemy-scheduler.
谢谢表哥回复,是的,我在提问之前看了之前的两个Issue,其中一个是关于时区的,我pipenv install celery-sqlalchemy-scheduler后查看代码已经加上了pytz.timezone了,-l debug之前也试过,但是你说的那个定时调度的heap如何才能打印出来呢?
附celery beat -l debug日志,其中<crontab: 1 * * * * (m/h/d/dM/MY)的两条数据是2个不同的任务,先后通过SessionManager创建添加的,也就是下面这2个,其中tasks.no_have_name是未命名的task,默认就是tasks目录下的,default.test是我命令的task,默认会下放到default_tasks队列。
<ModelEntry: not_have_name tasks.not_have_name([], **{}) <crontab: 1 * * * * (m/h/d/dM/MY), Asia/Shanghai>>
<ModelEntry: test default.test([], **{}) <crontab: 1 * * * * (m/h/d/dM/MY), Asia/Shanghai>> (schedulers.py:416)
(asset-ar0OxIPP) [root@VM asset]# celery beat -A celery_worker.ce -S celery_sqlalchemy_scheduler.schedulers:DatabaseScheduler -l debug
[2019-08-27 10:26:24] [INFO] - Server initialized for eventlet. (server.py:140)
celery beat v4.3.0 (rhubarb) is starting.
__ - ... __ - _
LocalTime -> 2019-08-27 10:26:24
Configuration ->
. broker -> amqp://xiaopo:**@IP:5672/asset
. loader -> celery.loaders.app.AppLoader
. scheduler -> celery_sqlalchemy_scheduler.schedulers.DatabaseScheduler
. db -> mysql://root:xxxxxx@IP:3306/celery-schedule
. logfile -> [stderr]@%DEBUG
. maxinterval -> 10.00 seconds (10s)
[2019-08-27 10:26:24] [DEBUG] - Setting default socket timeout to 30 (beat.py:105)
[2019-08-27 10:26:24] [INFO] - beat: Starting... (beat.py:586)
[2019-08-27 10:26:24] [DEBUG] - DatabaseScheduler: initial read (schedulers.py:399)
[2019-08-27 10:26:24] [INFO] - Writing entries... (schedulers.py:337)
[2019-08-27 10:26:24] [DEBUG] - DatabaseScheduler: Fetching database schedule (schedulers.py:292)
[2019-08-27 10:26:24] [DEBUG] - schedule: <crontab: 0 4 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG] - schedule: <crontab: 0 3 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG] - schedule: <crontab: 0 5 1,3,5 * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG] - schedule: <crontab: 0 7 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG] - schedule: <crontab: 0 9 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG] - schedule: <crontab: 1 * * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG] - schedule: <crontab: 1 * * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG] - Current schedule:
<ModelEntry: celery.backend_cleanup celery.backend_cleanup(*[], **{}) <crontab: 0 4 * * * (m/h/d/dM/MY), Asia/Shanghai>>
<ModelEntry: upsert_dns_domain tasks.upsert_dns_domain(*[], **{}) <crontab: 0 3 * * * (m/h/d/dM/MY), Asia/Shanghai>>
<ModelEntry: upsert_beidou_domain tasks.upsert_beidou_domain(*[], **{}) <crontab: 0 5 1,3,5 * * (m/h/d/dM/MY), Asia/Shanghai>>
<ModelEntry: update_url_is_external tasks.update_url_is_external(*[], **{}) <crontab: 0 7 * * * (m/h/d/dM/MY), Asia/Shanghai>>
<ModelEntry: send_business_mail tasks.send_business_mail(*[], **{}) <crontab: 0 9 * * * (m/h/d/dM/MY), Asia/Shanghai>>
<ModelEntry: not_have_name tasks.not_have_name(*[], **{}) <crontab: 1 * * * * (m/h/d/dM/MY), Asia/Shanghai>>
<ModelEntry: test default.test(*[], **{}) <crontab: 1 * * * * (m/h/d/dM/MY), Asia/Shanghai>> (schedulers.py:416)
[2019-08-27 10:26:24] [DEBUG] - schedule: <crontab: 0 4 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG] - schedule: <crontab: 0 3 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:25] [DEBUG] - schedule: <crontab: 0 5 1,3,5 * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:25] [DEBUG] - schedule: <crontab: 0 7 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:25] [DEBUG] - schedule: <crontab: 0 9 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:25] [DEBUG] - beat: Ticking with max interval->10.00 seconds (beat.py:588)
[2019-08-27 10:26:25] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:26:35] [DEBUG] - beat: Synchronizing schedule... (beat.py:381)
[2019-08-27 10:26:35] [INFO] - Writing entries... (schedulers.py:337)
[2019-08-27 10:26:35] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:26:45] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:26:55] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:27:05] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:27:15] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:27:25] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:27:35] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:27:45] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:27:55] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:28:06] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:28:16] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:28:26] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:28:36] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:28:46] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:28:56] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:29:06] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:29:16] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:29:26] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:29:36] [DEBUG] - beat: Synchronizing schedule... (beat.py:381)
[2019-08-27 10:29:36] [INFO] - Writing entries... (schedulers.py:337)
[2019-08-27 10:29:36] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:29:46] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:29:56] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:30:06] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:30:16] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:30:26] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:30:36] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:30:46] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:30:56] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:31:06] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:31:17] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:31:27] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:31:37] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:31:47] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:31:57] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:32:07] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:32:17] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:32:27] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:32:37] [DEBUG] - beat: Synchronizing schedule... (beat.py:381)
[2019-08-27 10:32:37] [INFO] - Writing entries... (schedulers.py:337)
[2019-08-27 10:32:37] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:32:47] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:32:57] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:33:07] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:33:17] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:33:27] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:33:37] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:33:47] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:33:57] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:34:08] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:34:18] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:34:28] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:34:38] [DEBUG] - beat: Waking up in 10.00 seconds. (beat.py:600)
from celery-sqlalchemy-scheduler.
好的,有时间再研究一下。
from celery-sqlalchemy-scheduler.
@AngelLiang 表哥,是我自己理解有问题,
[2019-08-27 10:26:24] [DEBUG] - schedule: <crontab: 1 * * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
这个是每个小时的:01分执行,而不是每分钟,我搞错了,经测试celery 4.3可以触发,是我自己的问题,抱歉。
from celery-sqlalchemy-scheduler.
好的,没关系。
from celery-sqlalchemy-scheduler.
Related Issues (20)
- Crontab Error HOT 1
- Dynamic update of the celery_crontab_schedule table? HOT 4
- Interval task 恢复enabled无法send task HOT 1
- The enabled interval schedule is not triggering If we add new Periodic Tasks to the database HOT 5
- 是否可以动态的添加修改定时任务 HOT 3
- Recursion error on repr for IntervalSchedule object HOT 1
- crontab 任务不发送 HOT 2
- Deleted schedule isn't removed from DatabaseScheduler.schedule in memory HOT 3
- celery-sqlalchemy-scheduler not working with ver 5.0.1 of Celery HOT 6
- Periodic tasks are being deleted. HOT 3
- Updating the celery_periodic_task_changed triggers ALL the existing tasks now. HOT 1
- Beat
- Future date periodic task blocking other tasks
- Beat was unable to find crontab task in the database HOT 1
- 新增任务或者修改状态,beat会报错并中止进程 HOT 1
- `celery_sqlalchemy_scheduler` does not run att all.
- "Connection is busy" error with SQL Server connection HOT 1
- CrontabSchedule addition in PeriodicTask gives error
- 更改了start_time以后会暂停所有任务的调度
- 疑似expires字段不生效 HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from celery-sqlalchemy-scheduler.