来自cron ubuntu 16.04的shell脚本的Python3

时间:2018-04-26 09:11:54

标签: bash python-3.x cron

我有一个Python3程序,我需要每小时执行2分钟。

无法让python直接从cron执行,我编写了一个包含命令的shell脚本。

执行此shell脚本的crontab是:

*/2 * * * * bash /home/john/PYTHONS/MASTER.sh

shell脚本很简单。我尝试了各种版本,包括:

#!/bin/bash
cd /home/john/PYTHONS/
python3 ~/PYTHONS/COMPLEXPYTHON.py
python3 ~/PYTHONS/SIMPLEPYTHON.py

包括:

#!/bin/bash
cd /home/john/PYTHONS/GDAXDEV/VPUMP
python3 $HOME/PYTHONS/COMPLEXPYTHON.py
python3 $HOME/PYTHONS/SIMPLEPYTHON.py

问题在于:

  1. 如果我从命令行执行shell脚本,那么python脚本运行就好了。

  2. 如果我从cron执行shell脚本,则只运行第二个python脚本。第一个根本就没有运行。并且,我似乎无法找出原因,或者如何解决它。

  3. 非常感谢任何建议或帮助。

1 个答案:

答案 0 :(得分:1)

我对这个问题一直存在疑问,其中没有一个人为我解决了这个问题。几个小时的测试每个变量组合都会让我找到一个可靠的解决方案。

我不再使用shell脚本,而是直接在cron中调用python。

首先,我们这样做了:

$ which python3
/home/john/[path to python]/bin/python3

因此,我们在项目的每个python文件中添加了shebang:

#!/home/john/[path to python]/bin/python3

而且,在cron中我们使用了python3的完整路径,以及我们想要运行的WORKING.py文件的完整路径。我们希望事情每小时运行5分钟,所以:

5 * * * * /home/john/[path to python]/bin/python3 /home/john/[path to dir]/WORKING.py

但是,这个生成的日志文件放在/ home / john /中,我希望它们在特定的目录中。此外,还有大量额外的python文件 - 与附近目录中的python文件名称相同 - 所以我想确定任何调用都是正确的。

所以,我在cron命令的开头添加了一个CD命令:

5 * * * * cd /home/john/[path to dir]/ && /home/john/[path to python]/bin/python3 /home/john/path to dir]/WORKING.py

从那时起它一直在可靠地运行。

我很感激stackoverflow上的资源以及我在这个社区获得的快速帮助,我希望这个条目能帮助其他人节省一整个挫折感。