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

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 进行环境变量设置这样更保险

Leave a Reply

Your email address will not be published. Required fields are marked *