我有一个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
问题在于:
如果我从命令行执行shell脚本,那么python脚本运行就好了。
如果我从cron执行shell脚本,则只运行第二个python脚本。第一个根本就没有运行。并且,我似乎无法找出原因,或者如何解决它。
非常感谢任何建议或帮助。
答案 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上的资源以及我在这个社区获得的快速帮助,我希望这个条目能帮助其他人节省一整个挫折感。