Crontab Django管理命令似乎启动了,但什么也没发生



我定义了一个django管理命令,该命令将一些数据导入到我的应用程序数据库中。我使用crontab运行它。旁注:所有东西都在一个码头集装箱里。当我在容器的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服务还没有启动,它就会启动。为了做到这一点,我使用了子流程。Popen tu运行service cron status

在这一点上,cron的执行不再继续。我不明白为什么它会止步于此,但在我看来,cron拒绝产生新的进程。(我在AppConfig.ready中有这个函数,因为我读到这个代码只执行过一次。)

停止cron执行的原因是我在子流程中运行了一个命令。没有使用绝对路径的Popen。所以Popen(我并没有把它放在try中…除外)在调用小的cron环境变量时崩溃了。

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

我希望这能帮助到别人,如果你认为我应该删除这个帖子,请告诉我,我会在收到通知后删除。

最新更新