博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
crontab 执行环境变量的问题
阅读量:6659 次
发布时间:2019-06-25

本文共 1007 字,大约阅读时间需要 3 分钟。

hot3.png

记录一下一个折磨我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/shUSER=sby_1104PATH=/usr/bin:/binPWD=/home/sby_1104SHLVL=1HOME=/home/sby_1104LOGNAME=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执行环境变量不一样造成的。

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

参考:

转载于:https://my.oschina.net/chenzuoping/blog/185383

你可能感兴趣的文章
C# 中的委托和事件(转)
查看>>
专业实训题目需求分析
查看>>
MyEclipse定位class文件
查看>>
Wireshark的过滤规则
查看>>
bzoj1592[Usaco2008 Feb]Making the Grade 路面修整*
查看>>
ios中PagedFlowView的用法
查看>>
pcl_view简单使用
查看>>
[数据安全] 一个简洁快速的去数据特征的混淆算法(obfuscate)
查看>>
Android开源框架:初识ButterKnife
查看>>
[待补充]面向接口编程,数据驱动编程
查看>>
bzoj1502: [NOI2005]月下柠檬树
查看>>
拓扑排序
查看>>
100道java基础面试题
查看>>
docker基本使用
查看>>
java学习笔记 --- 异常
查看>>
正则化
查看>>
js练习——图片切换
查看>>
Android Studio 的 build 过程
查看>>
SQL Server查询数据库空间分配情况、数据库备份信息
查看>>
win8的几种关机方法。
查看>>