在昨天之前我没有linux或python的经验。我是一名Visual C#开发商,所以请在回复时记住这一点。
我在linux(ubuntu服务器)中设置了一个CRON作业,它执行一个调用python脚本的shell脚本。 python脚本在终端中运行良好。 cron作业正在调用shell脚本(我有输出)。
在google上花了大约10个小时试图弄清楚为什么它似乎没有调用python脚本我决定查看import语句。有4个,其中一个不是python库,而是第三方python库。无论出于什么原因,当我运行程序时,它在import语句中选择库没问题。但是,当cron作业调用导入时,它必须无法找到它。
我的批处理脚本如下所示:
#!/bin/sh
PATH=/usr/local/bin
echo "start"
/usr/bin/python /usr/local/bin/checkit.py
checkit.py和import.py都在/ usr / local / bin中。两者都是chmod 775.我还需要做些什么才能让cron看到它?当我调用它时,程序运行正常,我编写的另一个脚本不使用任何第三方在cron作业中正常工作。我唯一能想到的是python无法在执行程序时找到导入.py文件
对不起,如果我不是那么清楚,这对我来说也是新的。
答案 0 :(得分:0)
从Linux命令行运行:
echo $PATH
获取您看到的输出并将其放入当前显示为“PATH = / usr / local / bin”的cron脚本中。它现在可能看起来像:
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin
cron不一定有权访问您的环境变量。通过这样做,你明确告诉它。
[编辑]也告诉cron明确地cd到脚本所在的目录。 cron文件行现在看起来像:
10 10 * * * cd /home/keht/directoryname && /home/keht/batchscript
将上面的/ home / keht / directoryname替换为批处理脚本所在目录的完整路径,并将/ home / keht / batchscript替换为批处理脚本的完整路径。 (10 10 ***就是例如。根据你的需要改变它。)
答案 1 :(得分:0)
感谢您的协助。我终于找到了解决方案。我不确定为什么它之前没有与每个人的解决方案一起使用但是我猜这归结为我对linux和python的无知。我可能错过了一些对其他人来说都是完全常识的东西。
基本上在我的主要python脚本中,我告诉它在哪里明确地找到第三方模块,但是执行以下操作:
import imp
myclass = imp.load_source('myclass', '/usr/local/bin/myclass.py')