服務器上裝了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時,所有的路徑都寫絕對路徑,包括程序的運行環境!!!