使用django_crontab包的调度管理命令

j1dl9f46  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(99)

最终,管理命令将用于每周一次抓取数据并填充一个数据库,但现在我只是尝试按计划打印。下面是管理命令(位于player/management/commands/update_data.py):

from django.core.management.base import BaseCommand

class Command(BaseCommand):
    def handle(self, *args, **options):
        print('This is working')

字符串
现在到日程安排部分……我跑了

python3 -m pip install django-crontab


将以下内容添加到settings.py

INSTALLED_APPS = [
'django_crontab',
'player',
]

CRONJOBS = [
    ('*/1 * * * * ', 'django.core.management.update_data'),# I believe what I am saying here is run update_data every minute? 
]


最后

python manage.py crontab add


返回

adding cronjob: (1be0bb6367b686fd03a204d920284ed3) -> ('*/1 * * * * ',
'django.core.management.update_data')


然后我等了一分钟,“这是工作”从来没有打印到控制台。如果有人熟悉这个django-crontabhttps://pypi.org/project/django-crontab/)包,或者知道调度管理命令的其他方法,请提供帮助。先谢了。

wlzqhblo

wlzqhblo1#

我知道这个问题很久以前就发布了,但我也遇到过类似的情况,在StackOverflow上找不到解决方案,所以我决定在这里发布我的解决方案。
在macOS Ventura 13.4上为我解决这个问题的方法是,在完成前面提到的所有步骤后,授予cron完整磁盘访问权限。要这样做,请进入系统首选项->安全和隐私->隐私->完整磁盘访问,并将cron添加到列表中。Cron应该位于/usr/sbin/cron中。
另外,我的cronjob有一点不同,因为我使用了django-crontab文档中也提到的不同类型的语法。(https://pypi.org/project/django-crontab/)我的cronjob看起来像这样:

CRONJOBS = [
('*/1 * * * *', 'django.core.management.call_command', ['update_data'])]

字符串
在这里,app_name/management/commands/update_data.py是管理命令,就像在您的项目中一样。
希望这能帮助下一个遇到问题的可怜人。

pbossiut

pbossiut2#

我自己的cron作业也有类似的问题,它通过shell脚本定期记录我的IP地址。使用Apple的迁移工具,该任务在3代Mac上传播并保持功能。只有在Ventura下它才不再工作,尽管它仍然在Ventura下列出。
crontab -l的。
除此之外,我还想提一下,不仅cron服务本身必须具有Full Disk Access,而且很有可能应该调用的作业也必须具有。这有点奇怪,因为手动调用shell作业可以工作,但从cron调用时却不行。
由于cron在2016年的某个时候被Apple弃用(https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/ScheduledJobs.html),我将常规任务改为launchd。这几乎更容易,而且运行得更好,因为当任务更改时会显示一条消息,因此您可以更好地了解后台发生的情况。仍然需要向定期运行的作业授予全磁盘访问权限。
我发现奥雷雷斯的答案刚才当我想把这个作为一个问题自己。(这两个答案都没有特别提到django,所以可能是一些额外的标签可能有助于找到这个答案。

相关问题