時間監視CLプログラムで、日付・時刻通知メッセージの受け取り時間を動的に変更する

時間監視CLプログラムで、日付・時刻通知メッセージの受け取り時間を動的に変更する弊社のようなソフトウェアハウスでは、残業者の作業終了時間に合わせてシステムの停止時間を任意の時間に変更できれば便利です。

弊社の時間監視CLプログラムは、利用者からの申請でシステムの停止時間を動的に変更しています。

その仕組みは、時間監視CLプログラムのシステム終了時間を変数にしておき、必要な時に値(時間)を変更し、システム停止時間を変更しています。

サンプルCLプログラムを例にして、システム停止時間の変更方法を以下に示します。

/. *****************************************************************
   *                                                               *
   *                 システム監視ジョブ                            *
   *                                                               *
   *****************************************************************
./
 PGM  (P01-?RESTART)
      PARA ?RESTART,NAME,IN,RESTART
      VAR ?HHMM,STRING*4
      VAR ?COMMAND,STRING*16
      VAR ?PROGRAM,STRING*16
      VAR ?LINE   ,STRING*16
      VAR ?LABEL  ,STRING*16
      VAR ?SVPGMEC,INTEGER,VALUE-0
      VAR ?SVPGMES,STRING*5
      VAR ?SVPGMEM,STRING*99
      VAR ?MSGAREA,STRING*99
      VAR ?MSG    ,STRING*99
      VAR ?STPHM  ,NAME*12,VALUE-BD0011830   /. ← ① ./
      VAR ?STPTM1 ,STRING*10
      VAR ?STPTM2 ,STRING*4,VALUE-'1830'
      VAR ?STPTM3 ,STRING*5,VALUE-'BD001'
      VAR ?STPTM4 ,STRING*9
      VAR ?STPTM5 ,STRING*5
      VAR ?PGMRM  ,STRING*99
      VAR ?ARMMSG1,STRING*5
      VAR ?ARMMSG2,STRING*6
      VAR ?ARMMSG3,STRING*128
      VAR ?ARMMSG31,STRING*40
      VAR ?ARMMSG4,STRING*136
      VAR ?SAVTM  ,STRING*4,VALUE-'0000'

 ACTMSG:
      ACTMSGQ MAXRMSG-100,UC-@YES|@A,
              SPI-*.*,
              SCI-*|*|@ALL,
              CDR-BD0010900|ID0010000
                 /BD0011300|ID0010000
                 /BD0011730|ID0010000
                 /?STPHM|ID0010000           /. ← ② ./
/.
***************************************************************
*     日付・時刻通知メッセージ内容チェック
***************************************************************
./
 MSGCHK:
      RCVMSG  WAIT-@YES
      ?PGMRM  := @PGMRM
      ?STPTM1  := %SBSTR(?PGMRM,1,10)      /. ← ③ ./
      IF     @PGMRM = 'ENDCHKJOB'
       THEN
             GOTO SYSSTOP
      END
      IF     ?STPTM1 = 'POWER OFF:'
       THEN
             GOTO SETTIME
      END

 /.   システムプログラムムの終了状態で、対応処理をする場合
      メッセージ番号を追加する                              ./
      CASE @PGMRS  OF
             #'S5301'#   GOTO  STPMSG  /.無停電電源装置の電源で動作./
      END

/.    監視時間の判定     ./
      ?HHMM  := %SBSTR(@PGMRM,5,4)        /. ← ④ ./
      IF     ?HHMM = ?STPTM2              /. ← ⑤ ./
      THEN
            GOTO  SYSSTOP                 /. ← ⑥ ./
      END
      CASE  ?HHMM  OF
            #'0900'#    GOTO  SNDMSG1
            #'1300'#    GOTO  SNDMSG2
            #'1730'#    GOTO  SNDMSG3
      END

SETTIME:
      ?STPTM2  := %SBSTR(?PGMRM,11,4)    /. ← ⑦ ./
      IF  ?SAVTM <  ?STPTM2
        THEN
           ?SAVTM  := ?STPTM2
           ?STPTM4 := ?STPTM3 && ?STPTM2 /. ← ⑧ ./
           ?STPHM  := %NAME(?STPTM4)     /. ← ⑨ ./
           DACTMSGQ                      /. ← ⑩ ./
           GOTO ACTMSG
      END
      GOTO MSGCHK

STPMSG:
      SNDMSG MSG-'******************',TOWS-*
      SNDMSG MSG-'*                                *',TOWS-*
      SNDMSG MSG-'*          停電です。            *',TOWS-*
      SNDMSG MSG-'*  処理状況を確認し電源切断処理  *',TOWS-*
      SNDMSG MSG-'*       CALL ENDCHKJBを          *',TOWS-*
      SNDMSG MSG-'*        起動して下さい。        *',TOWS-*
      SNDMSG MSG-'*                                *',TOWS-*
      SNDMSG MSG-'******************',TOWS-*
      GOTO  MSGCHK
/.
***************************************************************
*     メッセージの送信
***************************************************************
./
 SNDMSG1:
      SNDMSG MSG-'GOOD MORNING',TO-XCTL.*
      GOTO  MSGCHK

 SNDMSG2:
      SNDMSG MSG-'GOOD AFTERNOON',TO-XCTL.*
      GOTO  MSGCHK

 SNDMSG3:
      ?STPTM5  := %SBSTR(?STPTM2,1,2) && ':'
                                      && %SBSTR(?STPTM2,3,2)
      ?MSG := '本日の電源切断時間は  ' && ?STPTM5 && '  です!'
      SNDMSG MSG-?MSG,TO-XCTL.*
      GOTO  MSGCHK
/.
***************************************************************
*       システム制御機能停止処理
***************************************************************
./
 SYSSTOP:
      DACTMSGQ
/.
***************************************************************
*     各システム制御機能停止処理
***************************************************************
./
 CTLEND01:
      ?MSGAREA := '***  各システム制御機能停止処理'
               && '  開始  ***'
      LOGMSG MSG-?MSGAREA,JLOG-@YES,SLOG-@YES
/.************************************************************./
/.                                                            ./
/.    これ以降は、システム停止手順に合わせて変更して下さい    ./
/.    手続き名:CTLEND02  ~  PWROFFを御社の運用に変更        ./
/.                                                            ./
/.************************************************************./

 CTLEND02:
      DACTWS WS-*,SIGNOFF-@YES
      LOGMSG MSG-'# CNTJOB (DACTWS  ) END #',JLOG-@YES,SLOG-@YES

 CTLEND03:
      CANWTR DEV-SYSPRINT        /. ライタの取消し             ./
      LOGMSG MSG-'# CNTJOB (CANWTR  ) END #',JLOG-@YES,SLOG-@YES

 CTLEND04:
      STPRDAT                    /. RDA-SVの停止         ./
      LOGMSG MSG-'# CNTJOB (STPRDAT ) END #',JLOG-@YES,SLOG-@YES

 CTLEND05:
      STPPFS                     /. PCファイルサーバ停止     ./
      LOGMSG MSG-'# CNTJOB (STPPFS  ) END #',JLOG-@YES,SLOG-@YES

 CTLEND06:
      STPFTP                     /. FTP停止                 ./
      LOGMSG MSG-'# CNTJOB (STPFTP  ) END #',JLOG-@YES,SLOG-@YES

 CTLEND07:
      STPINETD                   /. INETD 停止                 ./
      LOGMSG MSG-'# CNTJOB (STPINETD) END #',JLOG-@YES,SLOG-@YES

 CTLEND08:
      STPCMS                     /. CMサーバ停止             ./
      LOGMSG MSG-'# CNTJOB (STPCMS  ) END #',JLOG-@YES,SLOG-@YES

 CTLEND09:
      STPNSS                     /. NSS停止                 ./
      LOGMSG MSG-'# CNTJOB (STPNSS  ) END #',JLOG-@YES,SLOG-@YES

 CTLEND10:
      ?MSGAREA := '***  各システム制御機能停止処理'
               && '  終了  ***'
      LOGMSG MSG-?MSGAREA,JLOG-@YES,SLOG-@YES
/.
***************************************************************
*     プログラムパワーオフ処理
***************************************************************
./
 PWROFF:
      ?MSGAREA := '***  プログラムパワーオフ処理'
               && '  開始  ***'
      LOGMSG MSG-?MSGAREA,JLOG-@YES,SLOG-@YES

      POWEROFF
      ?MSGAREA := '***  プログラムパワーオフ処理'
               && '  終了  ***'
      LOGMSG MSG-?MSGAREA,JLOG-@YES,SLOG-@YES
      GOTO SAVLOG
/.
***************************************************************
*     ステータスチェック
***************************************************************
./
 CHECK:
      WHEN ABNORMAL
           ?SVPGMEC  :=  @PGMEC
           ?COMMAND  :=  %LAST(COMMAND)
           ?PROGRAM  :=  %LAST(PROGRAM)
           ?LINE     :=  %LAST(LINE)
           ?LABEL    :=  %LAST(LABEL)
           ?SVPGMES  :=  @PGMES
           ?SVPGMEM  :=  @PGMEM
           ?MSGAREA  :=  'COMMAND='  &&  ?COMMAND
                     &&  ',LINE='    &&  ?LINE
                     &&  ',LABEL='   &&  ?LABEL
                     &&  ',PGMES='   &&  ?SVPGMES
                     &&  ',PGMEM='   &&  ?SVPGMEM
           LOGMSG  MSG-?MSGAREA,JLOG-@YES,SLOG-@YES

           CASE  ?LABEL  OF
                 #'SNDMSG1'#    ?SVPGMEC := 0     GOTO  MSGCHK
                 #'SNDMSG2'#    ?SVPGMEC := 0     GOTO  MSGCHK
                 #'SNDMSG3'#    ?SVPGMEC := 0     GOTO  MSGCHK
                 #'CTLEND01'#   ?SVPGMEC := 0     GOTO  CTLEND02
                 #'CTLEND02'#   ?SVPGMEC := 0     GOTO  CTLEND03
                 #'CTLEND03'#   ?SVPGMEC := 0     GOTO  CTLEND04
                 #'CTLEND04'#   ?SVPGMEC := 0     GOTO  CTLEND05
                 #'CTLEND05'#   ?SVPGMEC := 0     GOTO  CTLEND06
                 #'CTLEND06'#   ?SVPGMEC := 0     GOTO  CTLEND07
                 #'CTLEND07'#   ?SVPGMEC := 0     GOTO  CTLEND08
                 #'CTLEND08'#   ?SVPGMEC := 0     GOTO  CTLEND09
                 #'CTLEND09'#   ?SVPGMEC := 0     GOTO  CTLEND10
                 #'CTLEND10'#   ?SVPGMEC := 0     GOTO  PWROFF
                 #'DSPMSG'#                       GOTO  ABEND
                 #'ABEND'#                        GOTO  OWARI
                 #'SAVLOG'#                       GOTO  OWARI
           END

           GOTO DSPMSG
      END

 DSPMSG:
      SNDMSG MSG-'***************',TOWS-*,LEVEL-@B
      SNDMSG MSG-'*                          *',TOWS-*,LEVEL-@B
      SNDMSG MSG-'*  システム監視ジョブが    *',TOWS-*,LEVEL-@B
      SNDMSG MSG-'*  異常終了しました。      *',TOWS-*,LEVEL-@B
      SNDMSG MSG-'*    直ちに連絡して下さい。*',TOWS-*,LEVEL-@B
      SNDMSG MSG-'*                          *',TOWS-*,LEVEL-@B
      SNDMSG MSG-'***************',TOWS-*,LEVEL-@B
      ?MSGAREA    :=  'COMMAND='  &&  ?COMMAND
                  &&  ',PROGRAM=' &&  ?PROGRAM
                  &&  ',LINE='    &&  ?LINE
                  &&  ',LABEL='   &&  ?LABEL
                  &&  ',PGMES='   &&  ?SVPGMES
                  &&  ',PGMEM='   &&  ?SVPGMEM
      SNDMSG MSG-?MSGAREA,TOWS-*,LEVEL-@B
      IF  ?LABEL = 'SAVLOG' | ?LABEL = 'ABEND'
        THEN
           GOTO  OWARI
      END
      GOTO  ABEND
/.
***************************************************************
*     異常終了時のジョブログの採取
***************************************************************
./
 ABEND:
      SAVLOG TOFILE-JLOGFIL.SAVLOG,ADD-@NO,EDT-@JEF
      GOTO OWARI
/.
***************************************************************
*     ジョブログの採取
***************************************************************
./
 SAVLOG:
      SAVLOG TOFILE-JLOGFIL.SAVLOG,ADD-@NO,EDT-@JEF

 OWARI:
      RETURN PGMEC-?SVPGMEC

1.サンプルCLの時間変更処理の定義方法

①時間変更となる変数を定義

通常の運用時間を日付時刻間隔パラメータ形式で定義する。

VAR ?STPHM  ,NAME*12,VALUE-BD0011830  ← 通常は、18時30分が規定の時間
VAR ?STPTM1 ,STRING*10
VAR ?STPTM2 ,STRING*4,VALUE-'1830'   ← 時間変更用作業エリア
VAR ?STPTM3 ,STRING*5,VALUE-'BD001'
VAR ?SAVTM  ,STRING*4,VALUE-'0000'   ← 最終時間判定用退避エリア

②ACTMSGQの定義

ACTMSGQの日付時刻間隔パラメータに、①で定義した変数を指定する。

/?STPHM|ID0010000 ← 変数による通知設定

③時間変更の指示の判定

受信したメッセージから時間変更指示メッセージを取り出す。

?STPTM1 := %SBSTR(?PGMRM,1,10)  ← メッセージ本文よりキーワードの取り出し
IF     ?STPTM1 = 'POWER OFF:'  ← 時間変更キーワードの判定
THEN
GOTO SETTIME         ← 時間変更処理へ分岐
END

④通知時間の取り出し

システムからの日付時間通知メッセージより、通知時間を取り出す。

?HHMM  := %SBSTR(@PGMRM,5,4)

⑤~⑥システム通知時間と変数値の比較と処理分岐

IF     ?HHMM = ?STPTM2 ← 停止時間の判定
THEN
GOTO  SYSSTOP    ← システム停止処理へ分岐
END

⑦通知メッセージから変更時間の取り出し

CLに通知された変更時間からメッセージキューに指定する日付時刻間隔パラメータを作成する。

?STPTM2  := %SBSTR(?PGMRM,11,4) ← 通知メッセージ本文より変更時間の取り出し

⑧~⑨日付時刻間隔パラメータの作成

?STPTM4 := ?STPTM3 && ?STPTM2 ← 日付時刻間隔パラメータの作成
?STPHM  := %NAME(?STPTM4)   ← 名前型に変更

⑩時間変更を反映するためにメッセージキューの非活性化

メッセージキューの非活性化したのち、再度、活性化することで変更した時間が反映する。

DACTMSGQ ← メッセージキューの非活性化

2.停止時間の変更指示
弊社では、下記のSNDMSGコマンドで変更したい時間を時間監視CLプログラムに通知しています。

SNDMSG MSG-'POWER OFF:hhmm',TO-CNTJOB.?????,SLOG-@YES

*:hhmmの形式で停止時間を指定

RCVMSGコマンドで取得したメッセージ本文には、『POWER OFF:hhmm』でメッセージが設定されるので、③で1桁目から10桁目のキーワードを取り出し、⑦で11桁目から14桁目の変更時間を取り出す処理となる

尚、カレンダータイマーの電源切断時間との関係も考慮が必要となります。

3.サンプルCLのご利用について

サンプルCLは、コピー&ペスートでテキストエディタに貼り付け、御社のオフコンに転送することで利用できますが、システムの停止処理は御社の手順に変更してご利用ください。

About コンピュータ・サービス 73 投稿
〒689-2103 鳥取県東伯郡北栄町田井183-1 TEL: 0858-48-3131

最初のコメントをする

コメントを残す

メールアドレスが公開されることはありません。


*