服务器上装了anaconda3(python3.6.3)以及linux原装的python2.7以及其他的python环境
我直接在命令行输入python -V,显示如下内容:
我现在有一个Main.py的 python文件(python3写的),打算用linux的crontab定时作业,实现每小时的整点执行一次这个程序。
故我写了一个test_main.sh的脚本,内容如下:(假设Main.py,test_main.sh都在 /home/zhangsan/aaa/ 目录下)
#!/usr/bin/bash
cd /home/zhangsan/aaa
python Main.py
然后crontab -e 来编辑crontab定时作业
0 * * * * /home/zhangsan/aaa/test_main.sh
但是到了整点之后发现python文件并没有运行成功,然而直接/home/zhangsan/aaa/test_main.sh却可以正常运行。
这个问题困惑了我很久,最终经过查资料得知,运行crontab定时作业里边的东西,都要写绝对路径,python环境最好也写绝对路径
所以把test_main.sh 改成如下内容就可以了。
#!/usr/bin/bash
cd /home/zhangsan/aaa
/root/anaconda3/bin/python Main.py
原因分析:我认为,这也许时因为crontab运行python的时候,如果不写python的绝对路径,就默认是/usr/bin/python,而/usr/bin/python是python2.7,与我写的pyton3的代码是不兼容的,所以不会正常运行。
把python环境改为绝对路径之后,python环境就指定为anaconda的python3.6.3了,所以就可以正常运行了。
总之一句话,在使用crontab时,所有的路径都写绝对路径,包括程序的运行环境!!!