使用crontab启动程序时出现ImportError或ModuleNotFound错误



我是编码和Python的新手,读过很多关于模块绝对/相对导入的类似问题,但我不明白为什么我的cronjob不起作用。

当我从终端python3 example.py运行时,程序运行时没有问题。

然而,当我安排一个cronjob运行";例如"py";,由于ImportError,程序无法运行。它第一次失败是由于ModuleNotFound错误,所以我重新安装了有问题的模块(pyautogui(,这似乎解决了这个错误。

我已经尝试使用CCD_ 2而不仅仅是CCD_;ImportError:尝试在没有已知父包的情况下进行相对导入;。

有人能简单地解释一下这里发生了什么吗?或者指出我可以做的阅读方向,以了解terminal/cronjob是如何试图执行我的程序的?

感谢

有人能简单地解释一下这里发生了什么吗?或者指出我可以做的阅读方向,以了解terminal/cronjob是如何试图执行我的程序的?

好的。Crontab程序在不同于终端中的环境下运行。

检查这一点最可靠的方法是从crontab运行这个bash脚本:

#!/bin/bash
set > /tmp/set.txt

它将转储整个环境(可能您只需要$PATH(/tmp/set.txt";。

从终端运行相同的脚本,保存到不同的文件。如果将两者进行比较,您会注意到差异,例如PATH

而且,您已经猜到了,python使用PATH来查找它的各种位和块(就这一点而言,如果存在多个,则运行哪个python取决于PATH(。

在crontab文件中,您应该注意到,在顶部附近,有一个对SHELL变量和PATH变量的赋值。这些是以下所有命令使用的值。

您可能应该能够将PATH值设置为从终端获得的相同值,但请记住,您可能会中断同一crontab中任何其他脚本的操作(这就是为什么您应该使用/etc/cron.d文件(。

最新更新