1、問題描述
在用crontab設置定時任務時,發現py腳本在crontab中報錯,顯示import某些包找不到,但是手動直接運行py腳本,完全正常。
01 05 * * * ./get_topic_hourly.sh >> get_topic_hourly.log 2>&1
2、問題解析
主要是crontab的運行目錄和py腳本運行目錄不一樣(直接執行和通過任務執行,程序的 執行環境不同),更改py頭的目錄,直接指定當前系統中Python的目錄,即更改py腳本中默認的頭為 Python 安裝 目錄“!/usr/local/bin/python”,具體根據自己的目錄更改
查看python的安裝目錄可以用 which python 命令
若以上設置了依舊不執行可以嘗試下面的方式執行python
* * * * * cd /var/www/clientfolder/ && /usr/bin/python /var/www/clientfolder/your_python_script.py
原因是(直接拷貝):
Script is location-sensitive. This is related to always using absolute paths in a script, but not quite the same. Your cron job may need to
cd
to a specific directory before running, e.g. a rake task on a Rails application may need to be in the application root for Rake to find the correct task, not to mention the appropriate database configuration, etc
我分析可能是:直接執行腳本,腳本執行環境是腳本所在的目錄,而定時的腳本執行環境默認是root目錄,而當python腳本設置到相對文件路徑時就不能執行了。