Comments (13)
我第一次添加的时候也可以工作,我是直接修改的数据库,在task表里增加了三条(加上默认的clean的一共四条)。其中一个interval的任务每隔17分钟一次,两条是crontab的*/10,然后重新启动beat,就发现只有interval的那个会在heap里排到第一个,17分钟内就会执行,其他的两个cron的都是8个小时以后。
我debug(H) 把heap打印出出来:
[2019-07-13 11:42:09,761: DEBUG/MainProcess] [event_t(time=1562990172.082371, priority=5, entry=<ModelEntry: sometask3 sometask3([], **{}) <freq: 17.00 minutes>>), event_t(time=1562990399.9902568, priority=5, entry=<ModelEntry: celery.backend_cleanup celery.backend_cleanup
([], **{}) <crontab: 0 4 * * * (m/h/d/dM/MY), UTC>
event_t(time=1563016799.990166, priority=5, entry=<ModelEntry: sometask sometask(*[], **
{}) <crontab: /10 * * * * (m/h/d/dM/MY), UTC>
>), event_t(time=1563016799.990258, priority=5, entry=<ModelEntry: sometask2 sometask2([],
**{}) <crontab: */10 * * * * (m/h/d/dM/MY), UTC>
)]
from celery-sqlalchemy-scheduler.
我用的celery是4.3.0
你好,我在4.3.0下成功添加crontab任务,但是无法触发crontab,没有interval(timedelta)任务,想请教一下
celery-sqlalchemy-scheduler的版本?
怎么添加的crontab任务?
提供一下beat的-debug的日志
from celery-sqlalchemy-scheduler.
感谢反馈,全力解决中。。。(我好菜.jpg)
from celery-sqlalchemy-scheduler.
“添加了minute 是 */10”,你的目的是添加一个“每小时的第10分钟”执行的任务吗?添加好之后,第一次开始执行任务的时间却是在8小时之后而不是最近的小时执行?
from celery-sqlalchemy-scheduler.
经过我排查源码和测试,似乎并没有复现你说的bug(不过已经知道具体改动位置)。我这里用简单调整过的示例代码展示:
版本还是v0.1.1
beat_schedule = {
'echo-every-3-seconds': {
'task': 'tasks.echo',
'schedule': timedelta(seconds=3),
'args': ('hello', )
},
'add-every-minutes': {
'task': 'tasks.add',
#'schedule': schedules.crontab('*', '*', '*'),
# 改为:
'schedule': schedules.crontab('*/2', '*', '*'),
'args': (1, 2)
},
}
Windows10环境,beat app部分日志如下:
> celery beat -A tasks:celery -S tasks:DatabaseScheduler -l info
celery beat v4.2.0 (windowlicker) is starting.
__ - ... __ - _
LocalTime -> 2019-07-13 17:37:44
Configuration ->
. broker -> amqp://guest:**@localhost:5672//
. loader -> celery.loaders.app.AppLoader
. scheduler -> celery_sqlalchemy_scheduler.schedulers.DatabaseScheduler
. db -> sqlite:///schedule.db
. logfile -> [stderr]@%INFO
. maxinterval -> 10.00 seconds (10s)
[2019-07-13 17:37:44,360: INFO/MainProcess] beat: Starting...
[2019-07-13 17:37:44,364: INFO/MainProcess] Writing entries...
[2019-07-13 17:37:44,549: INFO/MainProcess] Scheduler: Sending due task echo-every-3-seconds (tasks.echo)
[2019-07-13 17:37:44,574: INFO/MainProcess] Writing entries...
[2019-07-13 17:37:44,650: INFO/MainProcess] Scheduler: Sending due task add-every-minutes (tasks.add)
[2019-07-13 17:37:47,531: INFO/MainProcess] Scheduler: Sending due task echo-every-3-seconds (tasks.echo)
...
[2019-07-13 17:38:00,000: INFO/MainProcess] Scheduler: Sending due task add-every-minutes (tasks.add)
[2019-07-13 17:38:02,535: INFO/MainProcess] Scheduler: Sending due task echo-every-3-seconds (tasks.echo)
...
[2019-07-13 17:40:00,000: INFO/MainProcess] Scheduler: Sending due task add-every-minutes (tasks.add)
[2019-07-13 17:40:02,564: INFO/MainProcess] Scheduler: Sending due task echo-every-3-seconds (tasks.echo)
[2019-07-13 17:40:05,565: INFO/MainProcess] Scheduler: Sending due task echo-every-3-seconds (tasks.echo)
以下三个时间点触发了add-every-minutes
任务。
- 17:37:44,650
- 17:38:00,000
- 17:40:00,000
并没有你说的会延迟8个小时后再触发。
如果可以,请告诉我你具体的测试步骤?
from celery-sqlalchemy-scheduler.
由于我日志是中午11点的,里面的time正好是现在19点多。。其实当时是8个小时以后。。
我自己做了些修改,目前似乎正常了:
diff --git a/celery_sqlalchemy_scheduler/models.py b/celery_sqlalchemy_scheduler/models.py
index 248ef73..82e00ae 100644
--- a/celery_sqlalchemy_scheduler/models.py
+++ b/celery_sqlalchemy_scheduler/models.py
@@ -1,6 +1,7 @@
# coding=utf-8
import datetime as dt
+import pytz
import sqlalchemy as sa
from sqlalchemy.orm import relationship, foreign, remote
@@ -98,7 +99,7 @@ class CrontabSchedule(ModelBase, ModelMixin):
hour=self.hour, day_of_week=self.day_of_week,
day_of_month=self.day_of_month,
month_of_year=self.month_of_year,
- # tz=self.timezone
+ tz=pytz.timezone(self.timezone)
)
@classmethod
diff --git a/celery_sqlalchemy_scheduler/tzcrontab.py b/celery_sqlalchemy_scheduler/tzcrontab.py
index f8260ab..098db5c 100644
--- a/celery_sqlalchemy_scheduler/tzcrontab.py
+++ b/celery_sqlalchemy_scheduler/tzcrontab.py
@@ -30,10 +30,9 @@ class TzAwareCrontab(schedules.crontab):
)
def nowfunc(self):
- # return self.tz.normalize(
- # pytz.utc.localize(datetime.utcnow())
- # )
- return datetime.now()
+ return self.tz.normalize(
+ pytz.utc.localize(datetime.utcnow())
+ )
def is_due(self, last_run_at):
"""Calculate when the next run will take place.
from celery-sqlalchemy-scheduler.
感谢反馈。正是这个修改位置。不知有兴趣提交一个PR否?(大佬请喝阔落.jpg)
from celery-sqlalchemy-scheduler.
顺便说,在Celery4.3+环境下也有schedules.crontab()
类似不触发的问题,所以我这边建议是Celery 4.2.x,不知道你的Celery版本?(可能这就顺便解决了~)
from celery-sqlalchemy-scheduler.
我用的celery是4.3.0
from celery-sqlalchemy-scheduler.
那么改之后我测了4.2.0和4.3.0,都能正常用。
from celery-sqlalchemy-scheduler.
非常感谢!经过一番折腾,我已经发布v0.1.2版本。有空可多多交流。
from celery-sqlalchemy-scheduler.
我用的celery是4.3.0
你好,我在4.3.0下成功添加crontab任务,但是无法触发crontab,没有interval(timedelta)任务,想请教一下
from celery-sqlalchemy-scheduler.
@xxxss 是我自己理解有误,是没有问题的,抱歉,是我自己理解有误。
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.