免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6126 | 回复: 10
打印 上一主题 下一主题

手动执行一个脚本可以正常运行,放到crontab执行的结果就不对了,我要发疯了,求助! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-30 00:22 |只看该作者 |倒序浏览
我在做一个DNS流量的统计脚本
首先定时用rndc stats执行生成一个文件  named.stats,内容如下:

+++ Statistics Dump +++ (1169740800)
success 10671130
referral 18368
nxrrset 118829
nxdomain 1019004
recursion 4093270
failure 906487
--- Statistics Dump --- (1169740800)
+++ Statistics Dump +++ (1169827200)
success 23922851
referral 35336
nxrrset 291352
nxdomain 1582219
recursion 9392071
failure 1616376
--- Statistics Dump --- (1169827200)
+++ Statistics Dump +++ (1169913600)
success 37991579
referral 64897
nxrrset 514053
nxdomain 2149104
recursion 14970366
failure 2351988
--- Statistics Dump --- (1169913600)
+++ Statistics Dump +++ (1170000000)
success 50707422
referral 101201
nxrrset 719085
nxdomain 2618247
recursion 20528779
failure 3087166
--- Statistics Dump --- (1170000000)
+++ Statistics Dump +++ (1170086391)
success 64218303
referral 128841
nxrrset 899490
nxdomain 3249586
recursion 26343193
failure 3943782
--- Statistics Dump --- (1170086391)


然后我用一个脚本stat_dns.sh,对这个文件进行操作,脚本如下:

#!/sbin/sh
cd /
cd /var/named
date >> stat_dns.txt
tail -15 named.stats|awk '/---/ {print $5}'|awk '{FS="("} {print $2}'|awk '{FS=")"} {print $1}'|awk '{printf"%s ",$0}'>test1
uccess_a=`more test1|awk '{print $1}'`
uccess_b=`more test1|awk '{print $2}'`
uccess=`expr $uccess_b - $uccess_a`

tail -15 named.stats|awk '{print $2}'|awk '{printf"%s ",$0}' > test2
success_a=`more test2|awk '{print $1}'`
success_b=`more test2|awk '{print $9}'`
success=`expr $success_b - $success_a`
echo success , $success >> stat_dns.txt

referral_a=`more test2|awk '{print $2}'`
referral_b=`more test2|awk '{print $10}'`
referral=`expr $referral_b - $referral_a`
echo referral , $referral >> stat_dns.txt

nxrrset_a=`more test2|awk '{print $3}'`
nxrrset_b=`more test2|awk '{print $11}'`
nxrrset=`expr $nxrrset_b - $nxrrset_a`
echo nxrrset , $nxrrset >> stat_dns.txt

nxdomain_a=`more test2|awk '{print $4}'`
nxdomain_b=`more test2|awk '{print $12}'`
nxdomain=`expr $nxdomain_b - $nxdomain_a`
echo nxdomain , $nxdomain >> stat_dns.txt

recursion_a=`more test2|awk '{print $5}'`
recursion_b=`more test2|awk '{print $13}'`
recursion=`expr $recursion_b - $recursion_a`
echo recursion , $recursion >> stat_dns.txt

failure_a=`more test2|awk '{print $6}'`
failure_b=`more test2|awk '{print $14}'`
failure=`expr $failure_b - $failure_a`
totle=`expr $success + $nxrrset + $nxdomain + $failure`
#echo timeless , `expr $uccess / 3600` Hour >> stat_dns.txt
echo Totle  ,  $totle >> stat_dns.txt
echo Query `expr $totle / $uccess`/s >> stat_dns.txt
echo fail , `expr $failure \* 100 / $totle`%  >> stat_dns.txt



手工执行得出如下结果:
2007年01月30日 星期二 00时04分34秒 CST
success , 13510881
referral , 27640
nxrrset , 180405
nxdomain , 631339
recursion , 5814414
Totle , 15179241
Query 175/s
fail , 5%

这个结果正是我需要的。

于是,我把这个脚本放到crontab 中每个一段时间执行一次,可是得出的结果却是:

Tue Jan 30 00:10:00 CST 2007
success ,
referral , 27640
nxrrset , 180405
nxdomain , 631339
recursion , 5814414
Totle ,
Query /s
fail , %

有几项没有计算出来,公式是一样的,为什么结果不同呢?

我的是solaris 10操作系统,这个应该没什么影响吧

我比较了两种执行方法的环境变量,都是一样的,没有什么区别,搞了好几个小时,实在搞不定,求助大家!!1

论坛徽章:
1
寅虎
日期:2015-01-23 02:35:47
2 [报告]
发表于 2007-01-30 00:24 |只看该作者
首先没细看你的shell,一般这种问题都是环境变量引起的,你看看生成的mail是否有错误信息,或者在cron里直接把错误信息重定向

论坛徽章:
0
3 [报告]
发表于 2007-01-30 01:01 |只看该作者
谢谢楼上的

我也参考了cu里面的帖子,说是环境变量的问题,但是我把变量设置的和手工执行一样,还是不行,也没有报错,还是不行,真是邪门了!

论坛徽章:
0
4 [报告]
发表于 2007-01-30 01:35 |只看该作者
绝对是环境变量的问题!请参考我前不久的帖子。

论坛徽章:
0
5 [报告]
发表于 2007-01-30 02:18 |只看该作者
我看到你的帖子了,但是改了没有效果,不知道是哪儿的原因,我也怀疑是变量的问题

论坛徽章:
0
6 [报告]
发表于 2007-01-30 03:06 |只看该作者
我做了重定向,日志有报错
expr: non-numeric argument
expr: non-numeric argument
expr: syntax error
expr: syntax error
expr: syntax error
expr: syntax error

但是我检查没有发现比较明显的错误,请大家帮我看看

论坛徽章:
0
7 [报告]
发表于 2007-01-30 12:35 |只看该作者
请把expr语句单独调出来,运行、测试

通过后,在放入crontab

expr我没有用过,Sorry

论坛徽章:
0
8 [报告]
发表于 2007-01-30 14:02 |只看该作者
小小建议:
#1-----
failure_a=`more test2|awk '{print $6}'`
failure_b=`more test2|awk '{print $14}'`

改成

failure_a=`more test2|awk '{print $6}' | bc`
failure_b=`more test2|awk '{print $14}' |bc`

#2-----

echo fail , `expr $failure \* 100 / $totle`%

建议将EXPR结果输出成变量后再ECHO,使用CRONTAB,多在BSH环境下,需要考虑.
不是很了解solaris的环境.

论坛徽章:
0
9 [报告]
发表于 2007-01-30 14:12 |只看该作者
expr中用到的所有变量都需要预判是否为空,是否为非数字。

论坛徽章:
0
10 [报告]
发表于 2007-01-31 10:35 |只看该作者
楼主还是检查一下环境变量吧,脚本里用到的、用不到的都要检查到。
前几天我也遇到同样的问题,把环境变量设置好了,就一切OK了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP