测试用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;