Django Celerybeat日志报错处理('NoneType' object has no attribute 'is_due')

image.png

分析原因

  1. 按照以上意思,Django celerybeat在加载任务的时候遇见任务中有无法指定执行时间的任务,表示为NoneType类型。

  2. 错误code如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[2018-04-20 17:38:29,294: CRITICAL/MainProcess] beat raised exception <class 'AttributeError'>: AttributeError("'NoneType' object has no attribute 'is_due'",)
Traceback (most recent call last):
  File "/root/venv3/lib/python3.6/site-packages/celery/apps/beat.py", line 107, in start_scheduler
    service.start()
  File "/root/venv3/lib/python3.6/site-packages/celery/beat.py", line 537, in start
    interval = self.scheduler.tick()
  File "/root/venv3/lib/python3.6/site-packages/celery/beat.py", line 255, in tick
    for in values(self.schedule)]
  File "/root/venv3/lib/python3.6/site-packages/celery/beat.py", line 255, in <listcomp>
    for in values(self.schedule)]
  File "/root/venv3/lib/python3.6/site-packages/django_celery_beat/schedulers.py", line 101, in is_due
    return self.schedule.is_due(self.last_run_at)
AttributeError: 'NoneType' object has no attribute 'is_due'
[2018-04-20 17:38:29,295: WARNING/MainProcess] Traceback (most recent call last):
[2018-04-20 17:38:29,295: WARNING/MainProcess] File "/root/venv3/bin/celery", line 11, in <module>
[2018-04-20 17:38:29,295: WARNING/MainProcess] sys.exit(main())
[2018-04-20 17:38:29,295: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/__main__.py", line 14, in main
[2018-04-20 17:38:29,296: WARNING/MainProcess] _main()
[2018-04-20 17:38:29,296: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/bin/celery.py", line 326, in main
[2018-04-20 17:38:29,296: WARNING/MainProcess] cmd.execute_from_commandline(argv)
[2018-04-20 17:38:29,296: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/bin/celery.py", line 488, in execute_from_commandline
[2018-04-20 17:38:29,297: WARNING/MainProcess] super(CeleryCommand, self).execute_from_commandline(argv)))
[2018-04-20 17:38:29,297: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/bin/base.py", line 281, in execute_from_commandline
[2018-04-20 17:38:29,297: WARNING/MainProcessreturn self.handle_argv(self.prog_name, argv[1:])
[2018-04-20 17:38:29,297: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/bin/celery.py", line 480, in handle_argv
[2018-04-20 17:38:29,297: WARNING/MainProcessreturn self.execute(command, argv)
[2018-04-20 17:38:29,297: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/bin/celery.py", line 412, in execute
[2018-04-20 17:38:29,298: WARNING/MainProcess] ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
[2018-04-20 17:38:29,298: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/bin/base.py", line 285, in run_from_argv
[2018-04-20 17:38:29,298: WARNING/MainProcess] sys.argv if argv is None else argv, command)
[2018-04-20 17:38:29,298: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/bin/base.py", line 368, in handle_argv
[2018-04-20 17:38:29,298: WARNING/MainProcessreturn self(*args, **options)
[2018-04-20 17:38:29,298: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/bin/base.py", line 244, in __call__
[2018-04-20 17:38:29,299: WARNING/MainProcess] ret = self.run(*args, **kwargs)
[2018-04-20 17:38:29,299: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/bin/beat.py", line 107, in run
[2018-04-20 17:38:29,299: WARNING/MainProcessreturn beat().run()
[2018-04-20 17:38:29,299: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/apps/beat.py", line 79, in run
[2018-04-20 17:38:29,299: WARNING/MainProcess] self.start_scheduler()
[2018-04-20 17:38:29,299: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/apps/beat.py", line 107, in start_scheduler
[2018-04-20 17:38:29,299: WARNING/MainProcess] service.start()
[2018-04-20 17:38:29,300: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/beat.py", line 537, in start
[2018-04-20 17:38:29,300: WARNING/MainProcess] interval = self.scheduler.tick()
[2018-04-20 17:38:29,300: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/beat.py", line 255, in tick
[2018-04-20 17:38:29,300: WARNING/MainProcessfor in values(self.schedule)]
[2018-04-20 17:38:29,300: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/celery/beat.py", line 255, in <listcomp>
[2018-04-20 17:38:29,300: WARNING/MainProcessfor in values(self.schedule)]
[2018-04-20 17:38:29,301: WARNING/MainProcess] File "/root/venv3/lib/python3.6/site-packages/django_celery_beat/schedulers.py", line 101, in is_due
[2018-04-20 17:38:29,301: WARNING/MainProcessreturn self.schedule.is_due(self.last_run_at)
[2018-04-20 17:38:29,301: WARNING/MainProcess] AttributeError
[2018-04-20 17:38:29,301: WARNING/MainProcess] :
[2018-04-20 17:38:29,301: WARNING/MainProcess'NoneType' object has no attribute 'is_due'

3.第一条分析的基本正确:被指定执行的任务没有执行的时间戳导致。

4.数据库信息对比后直接确认该问题:由于该任务不想执行,所以将crontab和秒定时给去掉,所以导致以上错误。

image.png

解决方案

  1. 由于不想设置时间,因此采用取消激活方案。

  2. 数据库激活取消操作:如下图

image.png

结果

1.正常运行image.png

原文地址:https://www.cnblogs.com/zksfyz/p/8949418.html