FTP を定期的に自動実行する

負荷テストや耐久テストで、ある時間間隔ごとに、ある回数だけ FTP を自動実行させたい、という事案があり、そのために書いた簡単なツールを知り合いの人にもらいました。

ということで、そのツールの公開です。


CL での FTP の実行

FTP はカンタンな CL で自動実行させることができます。

RUNFTP

             PGM                                                                
             OVRDBF     FILE(INPUT) TOFILE(FTPTEST/QCLSRC) MBR(CMD) +           
                          OVRSCOPE(*CALLLVL)                                    
             OVRDBF     FILE(OUTPUT) TOFILE(FTPTEST/QCLSRC) MBR(LOG) +          
                          OVRSCOPE(*CALLLVL)                                    
             FTP        RMTSYS(remotehost)                                      
             DLTOVR     FILE(INPUT OUTPUT) LVL(*)                               
             ENDPGM                                                             

INPUT というファイルは文字通り FTP 実行時の入力となり、OUTPUT というファイルは FTP 実行時のメッセージをログするものになります。

それぞれ、タイプを TXT にした任意の名前のメンバーを作成し、OVRDBF コマンドでその内容を FTP への入力/からの出力とするわけです。

FTP コマンド

入力のほうの内容は、たとえば↓のようなかんじですね。

CMD

USRPRF PASSWORD                                                    
namefmt 1                                                          
cd /source_folder                                                   
lcd /target_folder                                          
get testfile (replace                                       
quit                                                         

FTP ログ出力

LOG

出力となるメンバーには、内容は必要ありません。空のメンバーを作成しておけば OK です。

時間間隔と回数を指定してプログラムを実行

これを任意の時間間隔と回数を指定して実行する CL が↓のようになります。
文字型のパラメータで時間間隔(秒)と回数をわたすと、その時間間隔で DLYJOB し、回数分実行したら終了するというものです。

CALLFTP

             PGM        PARM(&WAITSECC &TARGETC)                                
                                                                                
             DCL        VAR(&COUNT) TYPE(*INT)                                  
             DCL        VAR(&TARGET) TYPE(*INT)                                 
             DCL        VAR(&WAITSEC) TYPE(*DEC) LEN(5 0)                       
             DCL        VAR(&TARGETC) TYPE(*CHAR) LEN(5)                        
             DCL        VAR(&WAITSECC) TYPE(*CHAR) LEN(5)                       
                                                                                
             /* PARMS ARE CHAR TYPE FOR EASE OF USE, */                         
             /* SO THOSE NEED TO BE CHANGED          */                         
             CHGVAR     VAR(&TARGET ) VALUE(&TARGETC)                           
             CHGVAR     VAR(&WAITSEC) VALUE(&WAITSECC)                          
                                                                                
 /* FTP SHOULD BE EXECUTED AT LEAST ONCE */                                     
 LOOP:       CHGVAR     VAR(&COUNT) VALUE(&COUNT + 1)                           
             CALL       PGM(FTPTEST/RUNFTP)                                    
             /* IF CONDITION IS MET, NO NEED TO WAIT */                         
             IF         COND(&COUNT = &TARGET) THEN(GOTO CMDLBL(EXIT))          
             DLYJOB     DLY(&WAITSEC)                                           
             GOTO       CMDLBL(LOOP)                                            
                                                                                
 EXIT:       ENDPGM                       

考えてみれば FTP に限らず、任意のプログラムの時間間隔と回数を指定した自動実行に使えますね。

コンパイル

FTP のプログラムも、時間間隔と回数を指定して実行させるプログラムも、↓のように CRTBNDCL コマンドでコンパイルします。

CRTBNDCL PGM(FTPTEST/RUNFTP) SRCFILE(FTPTEST/QCLSRC) DFTACTGRP(*NO)
CRTBNDCL PGM(FTPTEST/CALLFTP) SRCFILE(FTPTEST/QCLSRC) DFTACTGRP(*NO)

実行

↓のように実行すると、300秒 = 5分間隔で 2回実行される、ということになります。

SBMJOB CMD(CALL PGM(FTPTEST/CALLFTP) PARM('300' '2'))

[Top Pageに戻る]

Ads by TOK2