crontab 环境变量导致脚本运行错误

| 2013年4月15日

1.缺少LANG的ls取值错误 程序:

yestoday=`date +%Y%m%d -d-1day`
ytoday=`date +%F -d-1day`
pathroot="/data5/tt_chat/"
filelist=`ls $pathroot/data/ -l|grep $ytoday|awk '{print $8}'`
echo $filelist

按时间过滤过滤出昨天一天生成的文件,让后再做处理,本地测试执行,没有问题,加入crontab执行总是没有数据文件过滤出来,但是自己再本地执行,就可以了

++ date +%Y%m%d -d-1day
+ yestoday=20130414
++ date +%F -d-1day
+ ytoday=2013-04-14
+ pathroot=/data5/tt_chat/
++ grep 2013-04-14
++ awk '{print $8}'
++ ls /data5/tt_chat//data/ -l
+ filelist=
+ echo

看到输出是空的,为什么呢? 在本地ls看内容的结果是:

-rw-r--r-- 1 root root  4806765 2013-04-15 11:35 xurl.1365996810.txt
-rw-r--r-- 1 root root  4785242 2013-04-15 12:36 xurl.1366000462.txt

而crontab中输出的内容是:

-rw-r--r-- 1 root root 12936889 Apr  4 19:40 xurl.1365075440.txt
-rw-r--r-- 1 root root 10636839 Apr  4 20:43 xurl.1365079171.txt

在crotab中输出的env的值发现少的可怜啊

+env='SHELL=/bin/sh
USER=xspider
PATH=/usr/bin:/bin
PWD=/data5/tt_chat/script
HOME=/home/xspider
SHLVL=2
LOGNAME=xspider
_=/usr/bin/env'
SHELL=/bin/sh USER=webspider PATH=/usr/bin:/bin PWD=/data5/tt_chat/script HOME=/home/xspider SHLVL=2 LOGNAME=xspider
_=/usr/bin/env 

加入字符客户端字符集之后crontab的结果

#. /etc/profile
LANG=en_US.UTF-8
export LANG
-rw-r--r-- 1 root root  4806765 2013-04-15 11:35 sosourl.1365996810.txt
-rw-r--r-- 1 root root  4785242 2013-04-15 12:36 sosourl.1366000462.txt
-rw-r--r-- 1 root root  5591872 2013-04-15 13:37 sosourl.1366004119.txt

结果正常了,当然这是知道其原因是字符集没有设置,如果不知道怎么办?直接在shell开始出执行. /etc/profile 进行环境变量设置这样更保险

看完本文有收获?请分享给更多人

关注「黑光技术」,关注大数据+微服务