您的位置:首页 > 运维架构 > Shell

用crontab设置hive脚本的自动执行及shell 127返回码的解决

2018-12-30 18:22 781 查看

测试用crontab设置一段hive ETL脚本的自动执行,期间遇到了一个问题

设置好的脚本01.sh在命令行模式下 ./01.sh 可以执行,但是配置到crontab中就返回127码,hive后的任何命令都不执行

查看了其他网友贡献的解决方案,终于搞定。

解释一下127码:127码代表未找到命令,0代表成功执行。

所以我这里返回127说明crontab在执行01.sh时找不到hive命令。这就很神奇了,我单独敲hive -f 02.hive 是可以执行的,echo $HIVE_HOME 也是能显示路径的。想不通,最后没办法了 只好在shell脚本中再次指定一下环境变量 . /etc/profile(注意.与/之间的空格)。这里有一个可能,有两个环境变量的配置文件 /etc/profile /etc/bashrc 我hive_home开始是配置在/etc/bashrc,其他的比如 JDK/HADOOP/HBASE等等都是配置在/etc/profile 。别问我为啥整两个地方。我也忘了为啥。后来我都放到/etc/profile里了。但并不好使,还是得配置. /etc/profile在shell文件里。话不多说,看代码。

crontab内容

*/1 * * * * /home/hadoop/apache-hive-2.3.4-bin/01.sh /dev/null 2>&1>

*/1 * * * * echo $(date) >> /home/hadoop/test.txt

01.sh内容
    #!/bin/bash

    . /etc/profile

    echo hello >> /home/hadoop/test.txt

    hive -f /home/hadoop/apache-hive-2.3.4-bin/02.hive

    exitCode=$?
        if [ $exitCode -ne 0 ];then
            echo "hive execute failed,error_code:"$exitCode >> /home/hadoop/test.txt
            exit $exitCode
        fi

    echo done >> /home/hadoop/test.txt


02.hive内容
    use test;
    drop table t1;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐