2017-12-27 484 views
-1

我有一个bash脚本,我正在使用它来执行一个特定版本的Python(3.6)的python文件。在bash脚本当前位于我的桌面上(/home/pi/Desktop/go.sh)crontab bash脚本执行 - Raspberry Pi

#!/bin/bash 
python3.6 /home/pi/scriptDir/myScript.py 

这是我的crontab条目,当我做的crontab -l(注意,我已经删除了我的其他工作)

* * * * * bash /home/pi/Desktop/go.sh # JOB_ID_3 

当我使用命令行或从GUI运行此文件它正确执行。

当我有crontab做到这一点,没有任何反应。

我的python文件和bash脚本都是可执行的。 chmod + x

有什么明显的我失踪了吗?

**我的python脚本确实依赖于同一脚本目录中的其他文件,这可能是问题吗?

+0

我在> /home/pi/Desktop/clog.log中添加了我的cron,没有inital输出,但是当我使用echo时,我可以看到实际的bash脚本正在运行,因为我得到一个“开始”和“完成“回声如预期。所以这意味着错误与python脚本有关。那么如何调试/记录python脚本执行? – Robomato

回答

0

克伦工作是惊人的棘手。除了工作目录(您必须在某处设置)之外,还需要处理环境设置(例如,$PATH)。

首先将您的shell脚本的标准输出和错误重定向到日志文件,以便获得反馈。

+2

这是一个糟糕的摘要[Stack Overflow'cron'标签信息页面](/ tags/cron/info),它有一个很好的疑难解答部分。 – tripleee

0

这是什么让它为我工作。我没有使用我的Python安装的完整路径。除非你登录bash文件,否则没有迹象表明你有问题。

这是我现在的bash文件。回声只是为了确定我确实在运行bash文件。

#!/bin/bash 
echo started 
/home/pi/Python-3.6.0/python home/pi/myScriptFolder/myScript.py 
echo finished 

要打破执行脚本行: /home/pi/Python-3.6.0/python - 是哪里的Python 3.6.0安装在我的皮,它可以为你不同。 home/pi/myScriptFolder/myScript.py是我想运行的脚本。

这里是我的cron语句:

*/15 * * * * bash /home/pi/Desktop/go.sh > /home/pi/Desktop/clog.log 2>&1 -q -f 

打破这一行: */15 * * * *是cron的时间,在这种情况下,每15分钟。 bash /home/pi/Desktop/go.sh指定运行一个bash文件和该文件的目录。 > /home/pi/Desktop/clog.log 2>&1 -q -f这最后一节创建一个名为clog.log的日志文件,以便您可以看到发生了什么。

此处的关键不仅仅是记录go.sh bash文件的执行,还会将2>&1 -q -f添加到日志请求的末尾。在我这样做之前,没有迹象表明存在问题,之后我得到了返回到日志文件中的python文件错误。