运行crontab时出现hive:command not found和no module named argparse found解决办法

写了个shell脚本,是用hive拉取数据之后存在一个文件中,再调用一个python脚本以邮件的附件形式将这个文件发送出去。直接运行的时候完全没有问题,但是我准备每天弄一个任务定时发送邮件,在crontab 中写好了相应的语句,等了一会儿发现没有发送邮件。


纳尼?这是为什么呢?运行的脚本写的也是绝对路径啊。。。

鉴于我觉得这是个非常简单的功能,我一开始是没有写入日志的,后来我将标准错误输出写入到一个日志中,我发现上面写着:

hive:command not found

no module named argparse found。

= =

上网百度了一下,发现是crontab的环境变量和自己运行时的环境变量不同导致,而python中no module named argparse found大概是因为crontab中使用的python版本不支持argparse模块。

crontab环境变量的获取:在 crontab中加入一条printenv >xx/xx/xx/env.txt(都要使用绝对路径)


在shell脚本中加入

1)source /etc/profile #嗯,一开始我没加

2)然后用locate /bin/hive找出对应一个hive的位置,当然由于向下兼容,当然找的是最新版本的hive的位置,将原本的hive命令改成绝对路径

3)最后在调用python时,我打完python按了两下tab键,所有的python版本号就出现了,机子上最高的版本是python2.7,就用locate找出对应的python位置,

用/usr/local/bin/python2.7替代原本的python。


简而言之,就是所有能用到绝对路径的地方都使用绝对路径,然后用的版本尽可能地高,毕竟一般都是向下兼容吗。

做个纪念= =



2016.9.1日

运行一个程序出现了 /bin/sh: hive: command not found 

这个是在一个python脚本中调用hive出错,查了一天,顺手把脚本都优化了,还是没有查出来为什么。

我一直以为是由于一开始调用的hive出错,但是后来才发现是python脚本内调用的hive除了问题。搜索/bin/sh: hive: command not found 没找到相关结果,

搜索python/bin/sh: hive: command not found 就发现了这篇文章,唉,对,我之前写的。


其实这个问题也是由于crontab引起的,但是由于我直接在crontab内调用了python脚本导致的,直接调用的时候,找不到hadoop_home,写成绝对路径也没用。

于是最后写了了shell脚本,在shell内调用python,同时在脚本内加入

. /etc/profile

即可


简而言之,就是能用sh的地方尽量用sh ,很少出问题, =  =

再做个纪念=  =



  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值