centos crontab php >>&1 null,crontab 执行环境变量的问题

记录一下一个折磨我N天的crontab的问题

问题是这样的

我写了个php脚本run.php ,脚本里面调用了一下hive命令(hadoop相关的东西)生成hive_result.txt,同时在hive命令执行前和执行后都会用php命令生成文件log1和log2

然后我要让这个php脚本每一分钟执行一次

于是用‘crontab -e’在配置文件里面增加了一条。

奇怪的事情通过crontab执行的情况是log1和log2都生成了但是hive_result.txt却没生成。但是在shell里面直接执行run.php那么log1  log2  hive_result.txt都可以生成。我怀疑是不是shell的环境变量和crontab的环境变量不一样,所以可能hive命令找不到。

于是做了个实验在crontab的配置文件里面加了一条

*/1 * * * * printenv > /home/sby_1104/env.text

这个是告诉crontab每隔一分钟把它的环境变量输出到env.txt文件里,果不其然,env.txt文件里面的内容非常少只有如下的一点东西

SHELL=/bin/sh

USER=sby_1104

PATH=/usr/bin:/bin

PWD=/home/sby_1104

SHLVL=1

HOME=/home/sby_1104

LOGNAME=sby_1104

_=/usr/bin/printenv

因此可以基本确定是环境变量不一样的导致的。crontab的环境变量的path中确实不包含hive的命令的路径。

这时我有想到重定向不仅可以重定向std输出,也可以重定向错误信息。于是我又在crontab中增加一条

*/1 * * * * hadoop fs -ls /home/abc/ > /home/sby_1104/test.txt 2>&1

这个是将错误和标准输出都输出到test.txt文件

然后查看text.txt发现如下内容

/bin/sh: hadoop: command not found

真想终于大白了,就是由于crontab执行环境的环境变量和shell执行环境变量不一样造成的。

问题的症结找到了,解决问题当然就很容易,调用命令的时候都用绝对路径就好了。

参考:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值