免费注册 查看新帖 |

Chinaunix

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

求大侠帮助完成这个复杂的脚本........... [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-08 18:36 |只看该作者 |倒序浏览
/opt/mamon/log# grep -i "Mailbox Monitor" *
mamon-20101202-0.log:20101201 13:00:17 ---------------- Starting mailbox monitor process
mamon-20101202-0.log:20101201 16:43:32 ---------------- Mailbox Monitor process completed.
mamon-20101203-0.log:20101202 13:00:36 ---------------- Starting mailbox monitor process
mamon-20101203-0.log:20101202 16:07:27 ---------------- Mailbox Monitor process completed.
mamon-20101204-0.log:20101203 13:00:56 ---------------- Starting mailbox monitor process
mamon-20101204-0.log:20101203 16:08:34 ---------------- Mailbox Monitor process completed.
mamon-20101205-0.log:20101204 13:00:05 ---------------- Starting mailbox monitor process
mamon-20101205-0.log:20101204 16:10:01 ---------------- Mailbox Monitor process completed.
mamon-20101206-0.log:20101205 13:00:17 ---------------- Starting mailbox monitor process
mamon-20101206-0.log:20101205 16:06:00 ---------------- Mailbox Monitor process completed.
mamon-20101207-0.log:20101206 13:00:40 ---------------- Starting mailbox monitor process
mamon-20101207-0.log:20101206 16:08:36 ---------------- Mailbox Monitor process completed.
mamon-20101208-0.log_curr:20101207 13:00:48 ---------------- Starting mailbox monitor process
mamon-20101208-0.log_curr:20101207 16:07:37 ---------------- Mailbox Monitor process completed.

求大侠给一个脚本,脚本的目的就是每天定时在16:30pm,在/opt/mamon/log目录下用grep -i "Mailbox Monitor" * 得到输出,同时根据输出判断是否mail monitor process是否正常启动,如果已经过去连续3天以上都没有启动了(比如今天是12月8日,最近的一次Staring Mailbox Monitor process是20101205的话,说明6,7,8都没有正常启动了),进程可能已经僵死,需要执行命令先将僵死的程序停止,然后重新拉起.

停止的命令是:scswitch -n -j mips-mamon, 重新拉起的命令是:scswitch -e -j mips-mamon.

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2010-12-08 21:16 |只看该作者
本帖最后由 cjaizss 于 2010-12-08 22:10 编辑

/etc/crontab加一行

  1. 30 16 * * * X=`grep -i "Starting mailbox monitor" *|grep log_curr | tail -n 1 - | sed -r 's/.*log_curr:([0-9]+).*/\1/'`;Y=`date +%Y%m%d --date='2 days ago'`; if [ $X -lt $Y ] ;then  scswitch -n -j mips-mamon;scswitch -e -j mips-mamon;fi
复制代码

论坛徽章:
0
3 [报告]
发表于 2010-12-09 06:15 |只看该作者
/etc/crontab加一行
cjaizss 发表于 2010-12-08 21:16


试了一下你给你的方法,有语法错误.

grep -i "Starting mailbox monitor" /opt/MIPS/logs/mamon/log/*|grep log_curr | tail -n 1 - | sed -r 's/.*log_curr[0-9]+).*/\1/'

报错是:

usage: tail [+/-[n][lbc][f]] [file]
       tail [+/-[n][l][r|f]] [file]
Cannot open pattern-file: s/.*log_curr[0-9]+).*/\1/

论坛徽章:
0
4 [报告]
发表于 2010-12-09 06:38 |只看该作者
/etc/crontab加一行
cjaizss 发表于 2010-12-08 21:16



那个Y只是得到的当前的日期,请看以下输出:

ams:/tmp ROOT # set Y=`date +%Y%m%d --date='2 days ago'`
ams:/tmp ROOT # echo $Y
20101209
ams:/tmp ROOT # date
Thu Dec  9 11:23:35 NZDT 2010


而我的期望是比较X和Y是否相差2天以上,所以需要用[ ('$Y-$X') -ge 3 ]来表达这个意思吧?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2010-12-09 09:41 |只看该作者
试了一下你给你的方法,有语法错误.

grep -i "Starting mailbox monitor" /opt/MIPS/logs/mamon/log/ ...
dengkai5955 发表于 2010-12-09 06:15



    哦,你的tail不可以这样用?那你用下{ echo A;echo B; } | tail -n 1是打出什么呢?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
6 [报告]
发表于 2010-12-09 09:44 |只看该作者
那个Y只是得到的当前的日期,请看以下输出:

ams:/tmp ROOT # set Y=`date +%Y%m%d --date='2 days ...
dengkai5955 发表于 2010-12-09 06:38



    $X -lt $Y成立相差至少三天,你的例子里不正好3天吗?

论坛徽章:
0
7 [报告]
发表于 2010-12-09 10:14 |只看该作者
哦,你的tail不可以这样用?那你用下{ echo A;echo B; } | tail -n 1是打出什么呢?
cjaizss 发表于 2010-12-09 09:41


我这边的OS只能用tail -1,你的意思是想截取最后一行吧?
我直接用tail -1来得到了日期.
# grep -i "Starting mailbox monitor" /opt/MIPS/logs/mbmon/log/* |grep log_curr | tail -1 |sed 's/[^:]*:\([0-9]*\) .*/\1/'
20101208

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
8 [报告]
发表于 2010-12-09 10:21 |只看该作者
我这边的OS只能用tail -1,你的意思是想截取最后一行吧?
我直接用tail -1来得到了日期.
# grep -i "St ...
dengkai5955 发表于 2010-12-09 10:14



    呵呵,对对,tail -1 是可以的,现在习惯tail -n 1 -了...

论坛徽章:
0
9 [报告]
发表于 2010-12-09 10:21 |只看该作者
本帖最后由 dengkai5955 于 2010-12-09 10:28 编辑
$X -lt $Y成立相差至少三天,你的例子里不正好3天吗?
cjaizss 发表于 2010-12-09 09:44



我总结成脚本了:

#!/bin/sh
set X=` grep -i "Starting mailbox monitor" /opt/MIPS/logs/mbmon/log/* |grep log_curr | tail -1 |sed 's/[^:]*:\([0-9]*\) .*/\1/'`
set Y=` date +%Y%m%d --date='2 days ago'`
if [ $X -lt $Y ] ; then
scswitch -n -j mips-mamon;
scswitch -e -j mips-mamon;
else
echo “process is running fine!”
fi

可能在你的主机上, 这样的表达式Y=` date +%Y%m%d --date='2 days ago'`
得出的结果是20101207,但是在我的主机上得出的结果却还是20101209.


但是[ $X -lt $Y ] 不能表达出相差3天的意思,因为$X得到的是20101208,$Y得到的是20101209,我想表达成if [ $Y-$X -ge 3]; then,不知道这样写对不对?

论坛徽章:
0
10 [报告]
发表于 2010-12-11 04:05 |只看该作者
x=$(cat bb|grep "Starting mailbox monitor"|tail -1|awk -F '[: ]+' '{a=int(substr("'$dd'",7,);b=int(substr($2,7,)}END {print a-b}')

Y=3

if [ $x -gt $Y ] ;then  scswitch -n -j mips-mamon;scswitch -e -j mips-mamon;fi
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP