Cosminexus システム構築ガイド

[目次][用語][索引][前へ][次へ]

17.3.5 汎用スクリプトファイルの作成

Management Serverのプロセスを監視,起動および停止するための汎用スクリプトファイルをVBScriptで記述します。現用系の運用管理サーバと予備系の運用管理サーバで同一の汎用スクリプトファイルを使用し,同一のパスに配置してください。

<この項の構成>
(1) 汎用スクリプトファイルの例
(2) 汎用スクリプトファイルの関数
(3) 汎用スクリプトファイルの変数
(4) 運用管理サーバをアプリケーションサーバと同じマシンに構築している場合の汎用スクリプトファイルの例

(1) 汎用スクリプトファイルの例

運用管理サーバを1:1に配置して系を切り替える場合の汎用スクリプトファイルの例(GenericScript.vbs)を示します。なお,ここでは,運用管理サーバをアプリケーションサーバとは別のマシンに構築している場合の汎用スクリプトファイルの記述方法について説明します。運用管理サーバをアプリケーションサーバと同じマシンに構築している場合の汎用スクリプトファイルの記述方法については,「(4) 運用管理サーバをアプリケーションサーバと同じマシンに構築している場合の汎用スクリプトファイルの例」を参照してください。

汎用スクリプトファイルに定義する関数と変数については,「(2) 汎用スクリプトファイルの関数」,および「(3) 汎用スクリプトファイルの変数」を参照してください。

運用管理サーバをアプリケーションサーバとは別のマシンに構築している場合に,運用管理サーバで使用する汎用スクリプトファイルの例を次に示します。この汎用スクリプトファイルでは,Management Serverのプロセスを監視します。

 
Dim WshShell, fso, AccessInfoFile, oExec, oRun, oCosmiHome, oAdmin, oMngsvrc, oMngsvut, oCjsleep, oMngHost, oAAHost
Set WshShell = CreateObject("WScript.Shell")
 
oCosmiHome = WshShell.ExpandEnvironmentStrings("%COSMINEXUS_HOME%")
oMngsvrc = """" & oCosmiHome & "\manager\bin\mngsvrctl"""
oMngsvut = """" & oCosmiHome & "\manager\bin\mngsvrutil"""
oCjsleep = """" & oCosmiHome & "\CC\server\bin\cjsleep"""
 
oMngHost = "192.168.255.111" '--- Management Server
 
' ==== Open ====
Function Open( )
    Resource.LogInformation "======== Entering Open. ========"
    Open = True
End Function
 
' ==== Online ====
Function Online( )
    Resource.LogInformation "======== Entering Online. ========"
 
    '--- mngsvrctl ---
    Set oExec = WshShell.Exec(oMngsvrc & " start")
    Resource.LogInformation "### Management Server get starting. ### "
 
    Retries = 20
    For i=0 to Retries
        oRun = oMngsvut & " -m " & oMngHost & ":28080 check mngsvr"
        Set oExec = WshShell.Exec(oRun)
        Do While oExec.Status = 0
            WshShell.Run oCjsleep & " 10", 0, True
        Loop
        If oExec.ExitCode = 0 Then
            Resource.LogInformation "### Management Server started. ### rtn=" & oExec.ExitCode
            Resource.LogInformation oExec.StdErr.ReadAll
            Exit For
        End If
    Next
 
    If i > Retries Then
        Resource.LogInformation "### Management Server cannot start. ### rtn=" & oExec.ExitCode
        Resource.LogInformation oExec.StdOut.ReadAll
    End If
 
    '--- mngsvrutil ---
    oRun = oMngsvut & " -m " & oMngHost & ":28080 -t " & oAAHost & " -k host -s -l 360 start server"
    Set oExec = WshShell.Exec(oRun)
    Do While oExec.Status = 0
        WshShell.Run oCjsleep & " 1", 0, True
    Loop
    If oExec.ExitCode <> 0 Then
        Resource.LogInformation "### Logical Servers start failed. ### rtn=" & oExec.ExitCode
        Resource.LogInformation oExec.StdErr.ReadAll
    End If
 
    Online = True
End Function
 
' ==== LooksAlive ====
Function LooksAlive( )
    Resource.LogInformation "======== Entering LooksAlive. ========"
 
    '--- tasklist ---
    Set oExec = WshShell.Exec("tasklist /NH /FI ""IMAGENAME eq mngsvr.exe""")
    Do While oExec.Status = 0
        WshShell.Run oCjsleep & " 1", 0, True
    Loop
 
    If InStr(1, oExec.StdOut.ReadAll, "mngsvr.exe", 1) <> 0 Then
        LooksAlive = True
    Else
        LooksAlive = False
    End If
End Function
 
' ==== IsAlive ====
Function IsAlive( )
    Resource.LogInformation "======== Entering IsAlive. ========"
 
    '--- mngsvrutil ---
    oRun = oMngsvut & " -m " & oMngHost & ":28080 check mngsvr"
    Set oExec = WshShell.Exec(oRun)
    Do While oExec.Status = 0
        WshShell.Run oCjsleep & " 1", 0, True
    Loop
    If oExec.ExitCode <> 0 Then
        Resource.LogInformation "### Management Server command failed. ### rtn=" & oExec.ExitCode
        Resource.LogInformation oExec.StdErr.ReadAll
        IsAlive = False
    Else
        IsAlive = True
    End If
End Function
 
' ==== Offline ====
Function Offline( )
    Resource.LogInformation "======== Entering Offline. ========"
 
    '--- mngsvrutil ---
    oRun = oMngsvut & " -m " & oMngHost & ":28080 -t " & oAAHost & " -k host -s -l 360 stop server"
    Set oExec = WshShell.Exec(oRun)
    Do While oExec.Status = 0
        WshShell.Run oCjsleep & " 1", 0, True
    Loop
    If oExec.ExitCode <> 0 Then
        Resource.LogInformation "### Logical Servers stopping failed. ### rtn=" & oExec.ExitCode
        Resource.LogInformation oExec.StdErr.ReadAll
    End If
 
    '--- mngsvrctl ---
    Set oExec = WshShell.Exec(oMngsvrc & " stop")
    Do While oExec.Status = 0
        WshShell.Run oCjsleep & " 1", 0, True
    Loop
    If oExec.ExitCode <> 0 Then
        Resource.LogInformation "### Management Server cannot stop. ### rtn=" & oExec.ExitCode
        Resource.LogInformation oExec.StdOut.ReadAll
    End If
 
    Offline = True
End Function
 
' ==== Close ====
Function Close( )
    Resource.LogInformation "======== Entering Close. ========"
End Function
 
' ==== Terminate ====
Function Terminate( )
    Resource.LogInformation "======== Entering Terminate. ========"
End Function
 

(2) 汎用スクリプトファイルの関数

汎用スクリプトファイルには,関数を定義する必要があります。各関数の戻り値は,正常終了時にはTrueを,異常終了時にはFalseを返します。汎用スクリプトファイルの関数を次の表に示します。

表17-5 汎用スクリプトファイルの関数(運用管理サーバの1:1系切り替えの場合)

関数名 内容
Open この汎用スクリプトファイルが開かれるときに実行される関数です。Resource.LogInformationメソッドでクラスタログにログを出力します。
Online 汎用スクリプトリソースのオンライン時に実行される関数です。この関数で,Management Server,論理サーバを起動します。
LooksAlive リソースの稼働状況を簡単に把握するための関数です。この関数では,tasklistコマンドでManagement Serverのプロセスの有無を確認します。
IsAlive リソースの稼働状況を厳密に把握するための関数です。この関数では,mngsvrutilのcheckコマンドでManagement Serverの稼働状況を確認します。
Offline 汎用スクリプトリソースのオフライン時に実行される関数です。この関数で論理サーバ,Management Serverを停止します。
Close この汎用スクリプトファイルが閉じるときに実行される関数です。
Terminate 汎用スクリプトリソースの強制終了時に実行される関数です。

(3) 汎用スクリプトファイルの変数

汎用スクリプトファイルでは,必要に応じて次の表に示す変数の値を変更してください。

表17-6 汎用スクリプトファイルの変数(運用管理サーバの1:1系切り替えの場合)

変数名 内容
oMngHost Management Serverが稼働しているホストです。
クラスタIPアドレスを指定してください。
oAAHost 運用管理サーバ上の運用管理エージェントが稼働しているホストです。
クラスタIPアドレスを指定してください。

(4) 運用管理サーバをアプリケーションサーバと同じマシンに構築している場合の汎用スクリプトファイルの例

運用管理サーバをアプリケーションサーバと同じマシンに構築している場合に使用する汎用スクリプトファイルの例を次に示します。この汎用スクリプトファイルでは,Management Serverと運用管理エージェントのプロセスを監視します。

 
Dim WshShell, fso, AccessInfoFile, oExec, oRun, oCosmiHome, oAdmin, oMngsvrc, oMngsvut, oCjsleep, oMngHost, oAAHost
Set WshShell = CreateObject("WScript.Shell")
 
oCosmiHome = WshShell.ExpandEnvironmentStrings("%COSMINEXUS_HOME%")
oAdminac = """" & oCosmiHome & "\manager\bin\adminagentctl"""
oMngsvrc = """" & oCosmiHome & "\manager\bin\mngsvrctl"""
oMngsvut = """" & oCosmiHome & "\manager\bin\mngsvrutil"""
oCjsleep = """" & oCosmiHome & "\CC\server\bin\cjsleep"""
 
oMngHost = "192.168.255.111" '--- Management Server
oAAHost  = "192.168.255.111" '--- Adminagent Server
 
' ==== Open ====
Function Open( )
    Resource.LogInformation "======== Entering Open. ========"
    Open = True
End Function
 
' ==== Online ====
Function Online( )
    Resource.LogInformation "======== Entering Online. ========"
 
    '--- adminagentctl ---
    Set oExec = WshShell.Exec(oAdminac & " start")
    Do While oExec.Status = 0
        WshShell.Run oCjsleep & " 1", 0, True
    Loop
    If oExec.ExitCode <> 0 Then
        Resource.LogInformation "### Administration Agent cannot start. ### rtn=" & oExec.ExitCode
        Resource.LogInformation oExec.StdOut.ReadAll
    End If
 
    '--- mngsvrctl ---
    Set oExec = WshShell.Exec(oMngsvrc & " start")
    Resource.LogInformation "### Management Server get starting. ### "
 
    Retries = 20
    For i=0 to Retries
        oRun = oMngsvut & " -m " & oMngHost & ":28080 check mngsvr"
        Set oExec = WshShell.Exec(oRun)
        Do While oExec.Status = 0
            WshShell.Run oCjsleep & " 10", 0, True
        Loop
        If oExec.ExitCode = 0 Then
            Resource.LogInformation "### Management Server started. ### rtn=" & oExec.ExitCode
            Resource.LogInformation oExec.StdErr.ReadAll
            Exit For
        End If
    Next
 
    If i > Retries Then
        Resource.LogInformation "### Management Server cannot start. ### rtn=" & oExec.ExitCode
        Resource.LogInformation oExec.StdOut.ReadAll
    End If
 
    '--- mngsvrutil ---
    oRun = oMngsvut & " -m " & oMngHost & ":28080 -t " & oAAHost & " -k host -s -l 360 start server"
    Set oExec = WshShell.Exec(oRun)
    Do While oExec.Status = 0
        WshShell.Run oCjsleep & " 1", 0, True
    Loop
    If oExec.ExitCode <> 0 Then
        Resource.LogInformation "### Logical Servers start failed. ### rtn=" & oExec.ExitCode
        Resource.LogInformation oExec.StdErr.ReadAll
    End If
 
    Online = True
End Function
 
' ==== LooksAlive ====
Function LooksAlive( )
    Resource.LogInformation "======== Entering LooksAlive. ========"
 
    '--- tasklist ---
    Set oExec = WshShell.Exec("tasklist /NH /FI ""IMAGENAME eq adminagent.exe""")
    Do While oExec.Status = 0
        WshShell.Run oCjsleep & " 1", 0, True
    Loop
 
    If InStr(1, oExec.StdOut.ReadAll, "adminagent.exe", 1) <> 0 Then
        LooksAlive = True
    Else
        LooksAlive = False
        exit Function
    End If
 
    '--- tasklist ---
    Set oExec = WshShell.Exec("tasklist /NH /FI ""IMAGENAME eq mngsvr.exe""")
    Do While oExec.Status = 0
        WshShell.Run oCjsleep & " 1", 0, True
    Loop
 
    If InStr(1, oExec.StdOut.ReadAll, "mngsvr.exe", 1) <> 0 Then
        LooksAlive = True
    Else
        LooksAlive = False
    End If
 
End Function
 
' ==== IsAlive ====
Function IsAlive( )
    Resource.LogInformation "======== Entering IsAlive. ========"
 
    '--- mngsvrutil ---
    oRun = """" & oCosmiHome & "\manager\bin\adminagentcheck"""
    Set oExec = WshShell.Exec(oRun)
    Do While oExec.Status = 0
        WshShell.Run oCjsleep & " 1", 0, True
    Loop
    If oExec.ExitCode <> 0 Then
        Resource.LogInformation "### Administration Agent command failed. ### rtn=" & oExec.ExitCode
        Resource.LogInformation oExec.StdErr.ReadAll
        IsAlive = False
        exit Function
    End If
 
    oRun = oMngsvut & " -m " & oMngHost & ":28080 -t " & oAAHost & " -k host check mngsvr"
    Set oExec = WshShell.Exec(oRun)
    Do While oExec.Status = 0
        WshShell.Run oCjsleep & " 1", 0, True
    Loop
    If oExec.ExitCode <> 0 Then
        Resource.LogInformation "### Management Server command failed. ### rtn=" & oExec.ExitCode
        Resource.LogInformation oExec.StdErr.ReadAll
        IsAlive = False
    Else
        IsAlive = True
    End If
 
End Function