【问题标题】:Crontab Django Management command seems to start but nothing happensCrontab Django Management 命令似乎已启动,但没有任何反应
【发布时间】:2021-10-21 06:24:04
【问题描述】:

我已经定义了一个 django 管理命令,它将一些数据导入我的应用程序数据库。我使用 crontab 运行它。旁注:一切都在 docker 容器内。当我在容器的 shell 中手动使用该命令时,它可以完美运行。但是,当 crontab 尝试运行它时,什么也没有发生。

我的 crontab 行如下:

* * * * * nice -n 19 /usr/local/bin/python3 /code/manage.py my_command "a string argument for my command" # a comment to find the cron easily

(我将代码放入 /code 是因为当时这似乎是个好主意。)

我知道 crontab 会调用我的命令,因为 /var/log/syslog 在执行时会显示。我无法理解为什么什么都没有发生的原因。

作为对我命令的“句柄”方法的测试,我在第一行写了print("handling command"),然后在我的crontab 行的末尾添加了>> /code/cron.log。文本没有出现在文件中。

有什么想法吗?

编辑

我在 manage.py 中添加了一些“打印”语句,它们出现在日志文件中。这些打印在execute_from_command_line(sys.argv) 语句之前有效。这意味着这个函数出了问题(从 django.core.management 导入)。

我会继续调查。

编辑 2

在 Django 框架中打印了很多东西后,我在 AppConfig.ready 方法中找到了我的 apps.py 文件。在这里,我定义了一个函数,如果 cron 服务还没有启动,它会启动它。为此,我使用了 subprocess.Popen tu run service cron status

此时,cron 执行不再进行。 我不明白为什么它会停在那里,但在我看来 cron 拒绝产生新进程。 (我在 AppConfig.ready 中有那个函数,因为我读到这段代码只执行了一次。)

【问题讨论】:

    标签: python django cron


    【解决方案1】:

    停止 cron 执行的原因是我在 subprocess.Popen 中运行了一个不使用绝对路径的命令。因此,当使用小型 cron 环境变量调用时,Popen(我没有放入 try .. 除了)崩溃。

    我没想到会看那里,因为这部分代码是从我的 AppConfig.ready 方法中调用的。

    我希望这可以帮助某人,如果您认为我应该删除这篇文章,请告诉我,我会在收到通知时这样做。

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      相关资源
      最近更新 更多