Linux Centos7 使用定時任務crontab 跑python3腳本 報錯報錯缺少庫函數 ImportError: No module named XXXX,命令行執行無報錯解決方案

錯誤描述:

centos7使用定時任務crontab跑python腳本,報錯 ImportError: No module named XXXX

提示找不到模塊需要導包。

但是不在定時任務裏面執行,直接用python3 命令執行py腳本的時候是沒問題,而且之前也pip過類似的模塊。

 

原因分析:

應爲centos7 linux環境安裝的時候是默認安裝了python2.幾的版本,所以定時任務cron默認使用的是py2的環境

#crontab -e

查看下我的定時任務配置

下面我們來解析下:

29 09 * * *  這個沒啥好說的,每天9點29分執行定時任務

nohup  表示後臺運行

python3 -u  /usr/python/sgl_shell/gp_notice/gp.py  表示使用python3 去執行gp.py這個腳本   (問題就出在這)

>> /usr/python/sgl_shell/gp_notice/shell_log/run.log 2>&1  這個也沒啥好說的,就是指定日誌輸出位置

 

解決方法:

問題就出在第三行用python3去執行py腳本那裏

定時任務裏需要使用python3命令的時候需要使用全路徑名

如:/usr/local/bin/python3 -u  /usr/python/sgl_shell/gp_notice/gp.py

或者第一行加一個環境指定

如:

#!/usr/local/bin/python3

 xxxx  python3 -u  /usr/python/sgl_shell/gp_notice/gp.py

這樣配置後,執行定時任務腳本的時候就會以python3去執行腳本了,而不是使用系統默認的python2

 

注意:但是光像上面那樣改完還是會報錯,因爲定時任務裏環境裏crontab還是感知不到相關的環境變量

即使你使用python3命令去執行了還是找不到模塊包的位置,需要手動導入下環境變量

需要再加一個命令:

source /etc/profile; (分號不能少)

如:

#!/usr/local/bin/python3

 xxxx source /etc/profile; /usr/local/bin/python3 -u  /usr/python/sgl_shell/gp_notice/gp.py

這樣就可以正常執行了,且不會再報少包少模塊錯誤!

 

下面附上我的完整配置:

#!/usr/local/bin/python3
29 09 * * *  source /etc/profile; nohup /usr/local/bin/python3 -u  /usr/python/sgl_shell/gp_notice/gp.py >> /usr/python/sgl_shell/gp_notice/shell_log/run.log 2>&1

 

最後附上centos7 常用設置定時任務命令:

設置定時任務
方法一:vi /etc/crontab

方法二:(推薦)
直接用crontab -e,不需要指定用戶,如果是root權限,默認是root定時的

 

systemctl start crond.service           啓動服務

systemctl stop crond.service           關閉服務  

systemctl restart crond.service       重啓服務  

systemctl reload crond.service       重新載入配置

systemctl status crond.service       服務是否運行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章