crontab 执行 python定时代码无法导入模块

导读:本篇文章讲解 crontab 执行 python定时代码无法导入模块,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

前言:

crontab 是最常用的 linux 定时任务命令,当 linux 里面 python 环境有多种的时候有可能出现无法导入模块的状况,即出现 “ImportError” 错误,而且最怪异的是直接手动执行 python 代码无任何异常,总的来说 crontab 比较呆,我们仔细研究一下,方便我们顺利执行定时任务。

1.crontab 执行 python 的呆

看一个普通的 crontab 命令:

10 0 * * * cd /home/map_poi/main/; python -u on_time_start.py value.conf > on_time_start.log 2>&1 &

意思:每天凌晨0点10分,跳转到 /home/map_poi/main/ 目录下执行on_time_start.py 脚本,并把打印的日志不通过缓存(-u)直接输入到on_time_start.log 文件里面

我的 on_time_start.py 脚本有 import requests 模块引入,早上来看on_time_start.log文件就发现只有一段说明,意思就是模块 requests 找不到,白天直接执行明明是可以的,郁闷

研究了一下 crontab ,它使用的 python 命令可以理解是 linux 系统自带的python,如果你后来重新装了 python ,它根本就不会引用,那么和新装 python 关联的模块也就找不到,所以就需要指定 python 的绝对路径

2.查找 python 路径

用命令找一下 /usr/bin 下都有那些 python

ls /usr/bin | grep python

结果:

python
python2
python2.7

检验一下 python 里面是否有第三方模块:

/usr/bin/python -c "import requests"

然后发现:

  File "<string>", line 1, in <module>
ImportError: No module named requests

没有 requests 模块,然后看一下 python2 和 2.7,也没有,我都震惊了,那用python跑脚本为啥可以跑通,那个可以跑的 python 是哪里的

逼我啊,算了,用一个非常简单的命令看一下那么默认的 python 命令来源哪里:

which python

结果:

/root/anaconda2/bin/python

好吧,这是别人装的机器,我也不晓得这里还有一个 python ,检验一下是否有第三方模块

/root/anaconda2/bin/python -c "import requests"

没有任何提示,也就是说这个 python 里面是有第三方模块“requests”的,于是crontab 命令改一下,把python替换成上面那个绝对地址

10 0 * * * cd /home/map_poi/main/; /root/anaconda2/bin/python -u on_time_start.py value.conf > on_time_start.log 2>&1 &

事实证明,这是对的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/16613.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!