【问题标题】:Django_Crontab does not seem to runDjango_Crontab 似乎没有运行
【发布时间】:2021-11-27 12:11:36
【问题描述】:

希望我能得到一些关于 django crontab 的指导。

我有以下设置: 在 settings.py 中:

INSTALLED_APPS = [
    'django_crontab',
    ........
    ]

#other settings not related to crontab

CRONJOBS = [
    ('*/1 * * * * ', 'my_app.cron.cronjob')
]

在我的 my_app/cron.py 中(现在我有一个名为“name”的模型):

def cronjob():
    total_ref = models.Count.objects.get(name='name')
    total_ref.total += 1
    total_ref.save()
    return()

在我的 my_app/models.py 中:

class Count(models.Model):
    name = models.CharField(max_length=100, blank=True, null=True)
    total = models.IntegerField(blank=True, null=True)
    def __str__(self):
        return self.name

当我运行以下命令时:

$ python manage.py crontab add
crontab: no crontab for user
  adding cronjob: (26ea74b6ee863259e86bcab90f96ec1a) -> ('*/1 * * * * ', 'ms_app.cron.switch_count')

当我检查它是否在我的 crontab 中时

$ crontab -l
*/1 * * * *  /Path_to_env/bin/python /Path_to_my_app/my_project/manage.py crontab run 26ea74b6ee863259e86bcab90f96ec1a # django-cronjobs for myl_project

我正在使用 Django 3.2.5 和 django_crontab 0.7.1 运行 python 3.8.2

检查完所有这些后,当我去检查我的模型条目(总计)时,我仍然没有得到任何更改

【问题讨论】:

  • 你有一个 cron 守护进程在运行吗?查看系统的日志以查看它是否正在运行该作业。
  • 我在我的邮件中收到这个 PermissionError: [Errno 1] Operation not allowed: /Path_to_env/bin/python/pyvenv.cfg 现在调查一下

标签: python python-3.x django django-models django-crontab


【解决方案1】:

问题不在于我的代码,我需要做的是将我的 cron 添加到完全磁盘访问。 关注了这个link。

以下是问题和解决方案的摘录:

问题

熟悉类 UNIX 系统的人可能知道 cron,这是一个设计精良的小型作业调度程序,安装在所有 macOS 系统和大多数 Linux 发行版中。

Cron 可让您为作业执行设置基于时间的规则,以便您可以自动执行备份、运行状况检查、设置安全文件权限等操作。

随着 Mojave 的访问控制机制的引入,cron 作业不能再访问某些目录,因为它们包含敏感数据,但是当我们的 cron 作业处理这些数据时会发生什么?

修复

Mojave 让您将应用程序和二进制文件添加到“全盘访问”白名单中,让我们看看哪个二进制文件运行我的 cron 作业:

$ ps aux | grep cron
root            201  0.0  0.0  4295936  1188  ??  Ss  11:50PM  0:00.31 /usr/sbin/cron

在这里我们看到运行系统的 cron 作业的二进制文件是 /usr/sbin/cron。

授予对 cron 的全盘访问权限

  • 转到System Preferences > Security & Privacy > Privacy > Full Disk Access。

  • 打开系统设置,进入安全和隐私部分,在隐私选项卡上,点击全盘访问项

  • 单击 (+) 图标将项目添加到列表中

  • 按 command+shift+G 打开“转到文件夹...”对话框,输入 /usr/sbin/cron 并按 Enter:打开“转到文件夹”对话框并搜索 /usr/sbin

  • 选择cron文件并点击打开:选择/usr/sbin/cron

就是这样!现在我的脚本可以访问我用户的$HOME/Library 文件夹及其所有内容! 点击确定。

使用上面的还有一个警告:

警告:如果恶意行为者,这在安全方面不是一个好主意 可以创建 cron 作业或编辑作为 cron 作业运行的脚本,他或她 也将具有全盘访问权限。监控系统安装的 cron 手动或使用 KnockKnock 等工具进行作业,然后继续 小心。

【讨论】:

    猜你喜欢
    • 2015-09-22
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多