免费注册 查看新帖 |

Chinaunix

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

[求助] C shell的腳本如何轉成 b shell? (急~~) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-07 13:57 |只看该作者 |倒序浏览
小弟找到一個用來監控MES系統相關服務的csh腳本,請問要把它改成b shell的腳本要怎樣改?
因為此csh腳本我若手工執行時,就完全OK,所有功能均可實現,但如果在crontab 里排程時,雖然也有執行,可以記錄log和發mail警告,
但卻不會啟動服務? 
  現想把它改成b shell來試一試, 但知道要如何來改?
 比如 foreach  SERVER 部分、以及下面while 那部分,C shell 和b shell有何區別,要如何來改?

請各位前輩指點指點,謝謝了!

原腳本如下:
#!/bin/csh -f
#souce /export/home/fwuser/.cshrc
setenv HOME /export/home/fwuser
set path = (/bin /usr/bin /usr/ucb /FactoryWorks/FASTech/FACTORYworks/bin
/FactoryWorks/FASTech/CELLworks/bin /FactoryWorks/FASTech/CELLworks/admins
/oracle/product/9.2.0/bin /usr/local/bin . /etc)


#--- CheckSrv
#---
#--- This script is used to check and make sure the number of Servers
#--- are running.
#--- If anyone is dead, mailbox will be closed and restart the server.

#--- File for LOGS
set LOG="/export/home/fwuser/scripts/ckmes.dead.log"
set Mail="/export/home/fwuser/scripts/ckmes.mail.log"

#--- Number of Servers expected
set WIPSRV_COUNT=1
set PRPSRV_COUNT=1
set MDLSRV_COUNT=1
set EQPSRV_COUNT=1
set OPRSRV_COUNT=1
set CATSRV_COUNT=2
set PCMBXSRV_COUNT=1

foreach SERVER (WIP PRP MDL EQP OPR CAT PCMBX)
    switch ($SERVER)
    case "WIP":
        set SERVER_COUNT=$WIPSRV_COUNT
        breaksw
    case "PRP":
        set SERVER_COUNT=$PRPSRV_COUNT
        breaksw
    case "MDL":
        set SERVER_COUNT=$MDLSRV_COUNT
        breaksw
    case "EQP":
        set SERVER_COUNT=$EQPSRV_COUNT
        breaksw
    case "OPR":
        set SERVER_COUNT=$OPRSRV_COUNT
        breaksw
    case "CAT":
        set SERVER_COUNT=$CATSRV_COUNT
        breaksw
    case "PCMBX":
        set SERVER_COUNT=$PCMBXSRV_COUNT
        breaksw
    endsw

    @ COUNT = 1
    while ( $COUNT <= $SERVER_COUNT )
        set SERVER_NAME=$SERVER"srv."$COUNT
        set PS_COUNT=`ps -ef | grep -v grep | grep -c $SERVER_NAME`
        if ((( $SERVER == "PCMBX" ) && ( $PS_COUNT != "2" )) || (( $SERVER != "PCMBX" )
&& ( $PS_COUNT != "1" ))) then
#           echo "`date '+%Y/%m/%d %H:%M:%S'` :- $SERVER_NAME is dead." > /dev/pts/22
            echo "`date '+%Y/%m/%d %H:%M:%S'` :- $SERVER_NAME is dead." > $Mail
            echo "`date '+%Y/%m/%d %H:%M:%S'` :- $SERVER_NAME is dead." >> $LOG
            mailx -s "Warning, $SERVER_NAME on Fwdev is dead,Pls Check it." mis2838@gtbf-ltd.com < $Mail
            CWtrace -n $FWTRACE "Restarting $SERVER_NAME......" >& /dev/null
            mbx_close -n $FWMBX $SERVER_NAME >& /dev/null
            if ( $SERVER == "WIP") then
                "$SERVER"srv "set name=$SERVER_NAME" "set mbx=$FWMBX" "set dbuser=$FWDBUSER"
"set dbpassword=$FWDBPASS" "set dispatch=available" >& /dev/null &
            else
                "$SERVER"srv "set name=$SERVER_NAME" "set mbx=$FWMBX" "set dbuser=$FWDBUSER"
"set dbpassword=$FWDBPASS" >& /dev/null &
            endif
        endif
        @ COUNT = $COUNT + 1
    end

#foreach SERVER
end



[ 本帖最后由 suny628 于 2009-5-7 18:13 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-05-07 14:22 |只看该作者
一样运行的,改什么啊

论坛徽章:
0
3 [报告]
发表于 2009-05-07 15:53 |只看该作者
原帖由 timdcn 于 2009-5-7 14:22 发表
一样运行的,改什么啊


對,我知道在C shell的用戶下照樣可以運行b shell和C shell等, 但為何手工執行可以,但使用crontab 排程就僅能執行一部分,
無法成功啟動相應服務呢?

论坛徽章:
0
4 [报告]
发表于 2009-05-07 16:07 |只看该作者
現在我想試著把它改成b shell的來試一下,因為之前我寫的所有b shell通過crontab排程都可以正常執行。
 但是,此腳本中關于循環的那部分不知道如來改寫成b shell中循環的語法。
還各位前輩給予指點,謝謝了!

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
5 [报告]
发表于 2009-05-07 16:38 |只看该作者
按bash语法重写~~

论坛徽章:
0
6 [报告]
发表于 2009-05-07 16:39 |只看该作者

回复 #5 liaosnet 的帖子

你这不费话嘛

论坛徽章:
0
7 [报告]
发表于 2009-05-07 16:41 |只看该作者
ls两人怎么一样头像

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
8 [报告]
发表于 2009-05-07 16:42 |只看该作者

回复 #6 我是DBA 的帖子

那你C转换java不都得重写呀~~那那么多废话..不同规则方法转换?~?还不如重写快..
别想着走捷径就是了..

论坛徽章:
0
9 [报告]
发表于 2009-05-07 17:07 |只看该作者
原帖由 liaosnet 于 2009-5-7 16:42 发表
那你C转换java不都得重写呀~~那那么多废话..不同规则方法转换?~?还不如重写快..
别想着走捷径就是了..



我是想重寫,可是我才剛剛接觸Shell,對b shell循環啊什么的不太了解,不知道如何來寫?
所以想請大家指點指點!

具體需要是這樣子的,我們的服務器有啟了多個Srv 比如:WIP、EQP、PCMBX等,每個Srv呢就有可能會啟動多支,如果有一支他的Srv名叫作WIPSrv.1,EQPSrv.1,如果有兩支那就是WIPSrv.2 ,EQPSrv.2,各個Srv根據不同的需要,可能啟的數量不一樣,比較PCMBX可能會啟10支,其他的可能僅會啟3支。
  現在腳本要實現的功能就是,根據我初始化的每支Srv的數量,判斷當前每支Srv運行了几支,哪几支沒有運行,則寫入log,并發mail告警,然后啟動相應的Srv

    請各位幫忙看下要怎么來寫? 可參考上面的那個csh, 或者幫我寫個框架也行,主要是 循環判斷各Srv 及數量那兩段。
先謝謝各位了!

论坛徽章:
0
10 [报告]
发表于 2009-05-08 10:32 |只看该作者
各位幫忙指點指點呀!
謝謝了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP