免费注册 查看新帖 |

Chinaunix

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

crontab执行脚本总是得到错误的结果,如果手工执行得到正确结果,为何呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-03 09:50 |只看该作者 |倒序浏览
脚本如下
cmd1a:/tmp ROOT # more purgemonitor.sh
#!/bin/sh
X=`grep -i "Starting mailbox monitor" /opt/MIPS/logs/mbmon/log/* |grep log_curr | tail -1 |sed 's/[^:]*:\([0-9]*\) .*/\1/'`
Y=`grep -i "Monitor process completed" /opt/MIPS/logs/mbmon/log/* |grep log_curr | tail -1 |sed 's/[^:]*:\([0-9]*\) .*/\1/'`
M=`scstat|grep Gro|grep mips|grep Online|awk '{print $3}'`
N=`scstat|grep Gro|grep dsuic|grep Online|awk '{print $3}'`
Z=`date +%H:%M`
K=`date +%Y-%m-%d`
if [ "$X" != "$Y" ]||[ "$M" = "$N" ];then
echo "ruge Process may not working fine or failed currently at $Z on $K, further investigation may required" >> /tmp/mbmon_purge.lo
g
else
echo "ruge Process is working fine, daily check by script at $Z on $K !" >> /tmp/mbmon_purge.log
fi

如果我手工执行这个脚本,能按照预想的输出日志. Pruge Process is working fine, daily check by script at 13:44 on 2011-06-03 !

如果用crontab来执行,能执行,但是却输出另外一条日志ruge Process may not working fine or failed currently at 13:45 on 2011-06-03, further investigation may required

为何crontab执行就要出错呢, 是不是crontab的对字符串类型的日期不识别? 因为我用的是这样的比较条件[ "$X" != "$Y" ]

cmd1a:/tmp ROOT # grep -i "Starting mailbox monitor" /opt/MIPS/logs/mbmon/log/* |grep log_curr | tail -1 |sed 's/[^:]*:\([0-9]*\) .*/\1/'
20110602
cmd1a:/tmp ROOT # grep -i "Monitor process completed" /opt/MIPS/logs/mbmon/log/* |grep log_curr | tail -1 |sed 's/[^:]*:\([0-9]*\) .*/\1/'
20110602
cmd1a:/tmp ROOT #

论坛徽章:
0
2 [报告]
发表于 2011-06-03 10:00 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2011-06-03 10:26 |只看该作者
where27 发表于 2011-06-03 10:00



你好:

我在crontab里面加了/bin/sh,同时也在%符号前面加了\符号来转义,但是还是不行呢?

24 14 * * * /bin/sh /tmp/purgemonitor.sh >/dev/null 2>&1

Z=`date +\%H:\%M`
K=`date +\%Y-\%m-\%d`

论坛徽章:
0
4 [报告]
发表于 2011-06-03 10:39 |只看该作者
回复 3# youlingbohaozhe


    把24 14 * * * /bin/sh /tmp/purgemonitor.sh >/dev/null 2>&1
改成
24 14 * * * /bin/sh -x /tmp/purgemonitor.sh >/xxx.log 2>&1
到/xxx.log里看是哪儿出现了问题

论坛徽章:
0
5 [报告]
发表于 2011-06-03 10:41 |只看该作者
`date +%H:%M`

$(date +%H:%M)

论坛徽章:
0
6 [报告]
发表于 2011-06-03 11:29 |只看该作者
回复  youlingbohaozhe


    把24 14 * * * /bin/sh /tmp/purgemonitor.sh >/dev/null 2>&1
改成
24 ...
where27 发表于 2011-06-03 10:39



cmd1a:/tmp ROOT # crontab -l|grep purgemonitor.sh
22 15 * * * /bin/sh -x /tmp/purgemonitor.sh >/tmp/test.log 2>&1

得到如下打印信息: 奇怪的是

cmd1a:/tmp ROOT # more test.log
+ grep -i Starting mailbox monitor /opt/MIPS/logs/mbmon/log/mbmon-20110603-0.log_curr
+ grep log_curr
+ tail -1
+ sed s/[^:]*:\([0-9]*\) .*/\1/
X=20110602
+ grep log_curr
+ grep -i Monitor process completed /opt/MIPS/logs/mbmon/log/mbmon-20110603-0.log_curr
+ tail -1
+ sed s/[^:]*:\([0-9]*\) .*/\1/
Y=20110602
+ scstat
/tmp/purgemonitor.sh: scstat: not found --- 为何scstat命令执行不了呢? 检查cluster状态的,手工执行是可以啊
+ grep Gro
+ grep mips
+ awk {print $3}
+ grep Online
M=
+ scstat
/tmp/purgemonitor.sh: scstat: not found   -- 为何scstat命令执行不了呢? 检查cluster状态的,手工执行是可以的啊
+ grep Gro
+ grep dsuic
+ awk {print $3}
+ grep Online
N=
+ date +%H:%M
Z=15:22
+ date +%Y-%m-%d
K=2011-06-03
+ [ 20110602 != 20110602 ]
+ [  =  ]
+ echo process seems in abnormal at 15:22 on 2011-06-03,pls inform support engineer to check!


手工执行是可以得到结果cmd1a的.
cmd1a:/tmp ROOT # scstat|grep Gro|grep mips|grep Online|awk '{print $3}'
cmd1a

论坛徽章:
0
7 [报告]
发表于 2011-06-03 11:35 |只看该作者
回复 6# youlingbohaozhe


    把这个命令scstat的全路径写上就行了

论坛徽章:
0
8 [报告]
发表于 2011-06-03 12:05 |只看该作者
回复  youlingbohaozhe


    把这个命令scstat的全路径写上就行了
where27 发表于 2011-06-03 11:35


问题解决,非常感谢.

论坛徽章:
0
9 [报告]
发表于 2011-07-08 10:05 |只看该作者
学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP