注意cron的环境变量

来源:互联网 发布:淘宝联盟上商品优惠券 编辑:程序博客网 时间:2024/04/28 09:21

最近在做一个自动化统计日报,其实就是简单的数据统计、收集、处理和发邮件,这些任务是用cron来实现的,每天在指定的时间去做这些事情。

今天早上收到了日报,但是有些数据没有发出来,查看了下log发现数据收集调用的的一个python程序跑失败了,这段程序import了hashlib模块,程序报错提示找不到这个模块。


测试时一直使用的都是默认的python,是2.5的版本,已经自带了hashlib模块,看了下系统里面还有一个python2.4的版本,在2.4里还没有hashlib这个模块。

程序既然抛错,难道是没有使用默认的python2.5?

查看python2.5的安装路径和系统的PATH,发现它是安装在一个系统第三方路径上,而我自己配置的PATH已经将这个第三方路径放在了最前面,这也解释了我在terminal下运行python默认就是2.5的版本。

为什么cron没有识别?难道是cron不使用我的PATH?


为了证实猜想,在网上搜索了一下,找到了这个AskUbuntu的链接,总结了cron执行失败的诸多原因,发现第一个就是跟这个PATH有关

Cron passes a minimal set of environment variables to your jobs

cron的PATH和用户自身的PATH不一样!然后我测试了一下,在cron执行时的PATH的确是没有包含那个python2.5所在的第三方路径,所以使用了安装在/usr/bin下面的python2.4,导致数据收集失败。

这个答案同样也给出了解决方法,最好的个人认为,就是在cron执行的脚本里修改PATH,于是我在自动化shell脚本的最上面将这个第三方路径放在了PATH的最前面,数据成功收集。

0 0