毎日のスケジュールの設定

サーバー・デーモンを毎日、自動開始させるには?

PC クライアントと IBM i のTCP/IP接続が正常に行なわれていても、毎日の IBM i の IPL 後に
STRTCPSTRSPLSVR の2つのコマンドを手動で実行するのは面倒な作業です。
すでに TCP/IP を日常的に使用している IBM i ユーザーであれば
何らかの方法を講じていると思われますが、参考例として 2 つの方法をご紹介します。

【方法1】STRSPLSVR をジョブ・スケジュールする。

コマンド STRSPLSVR + F4 キー によってプロンプト表示させます。

パラメーターのうち、SBMJOB スケジュールの開始日が *CURRENT のときは直ちにジョブが開始されますが、
*WEEKLY を設定して開始時刻を指定しておけば、月曜から金曜までの指定した時刻に
サーバージョブを起動させることができます。

一旦、STRSPLSVR を *WEEKLY で開始させてしまえば、
以降の日に STRSPLSVRを実行する必要はありません。
しかし、操作員が誤って待機中の STRSPLSVR を取消した場合には、
改めて STRSPLSVR を実行しなければなりません。

【方法2】スタートアップ PGM に組込む

CL の知識があることが前提
次に説明する内容については、CL プログラムの知識を充分お持ちの方が、
しかも注意深く行なっていただく必要があります。

コマンド入力画面において、

DSPSYSVAL QSTRUPPGM + 実行キー

により、システム値の始動プログラムとして登録されているのが
QSYS ライブラリーの中の QSTRUP であることがわかります。
QSTRUP の中に STRTCP や STRPNLSVR を組込むことによって、
自動でサーバーを起動することができます。

次にご説明するのは、始動プログラム QSTRUP の中にSTRTCP や STRSPLSVR を組み込む方法です。
その手順は以下の通りです。

  1. CLプログラム:QSYS / QSTRUP の CL原始を取り出す。

    RTVCLSRC(原始CL検索)コマンドを次のように使ってCL原始を取り出します。

    RTVCLSRC PGM(QSYS/QSTRUP) SRCFILE(QGPL/QCLSRC)

    既存の CL プログラムの原始も RTVCLSRC=*YES であれば、
    この方法で失われた CL 原始を復元することができます。

  2. SEU によってQSTRUPのCL原始を修正する。

    STRSEU QGPL/QCLSRC QSTRUP + 実行キー

    SEU を起動し、最後の 「RETURN」 命令の直前に、次の 2行を追加します。

      STRTCP
      SPOOLWTR/STRSPLSVR

    「 F3=終了 」 で原始を保管します。

  3. QSTRUPをコンパイルする。

    CRTCLPGM QGPL/QSTRUP SRCFILE(QGPL/QDDSSRC) AUT(*ALL)

    でプログラム:QSTRUP をライブラリー QGPL に作成します。

  4. システム値 : QSTRUPPGM を修正する。

    WRKSYSVAL QSTRUPPGM + 実行キー によって

    
     始動プログラム . . . . . . . :   QSTRUP
       ライブラリー . . . . . . . :     QGPL
    						

    のように、ライブラリーを QSYS から QGPL へ変更してください。

このように、元の QSYS の QSTRUP を変更することなく
QGPL に新しく作成した QSTRUP に指定を変える方法であれば、
問題が生じたときにはいつでも QSYS/QSTRUP に戻すことができます。

スタート・アップ(QSTRUP)の使い方

OS/400 のスタート・アップ・プログラムは QSTRUP という名前で登録されています。
コマンド DSPSYSVAL QSTRUPPGM + (実行キー) によって


                                システム値表示

 システム値 . . . . . . :   QSTRUPPGM
 記述 . . . . . . . . . :    始動プログラム


 始動プログラム . . . . . . . :   QSTRUP         名前, *NONE
   ライブラリー . . . . . . . :     QSYS         名前
			

のように表示されます。
ここで、コマンド :

RTVCLSRC QSYS/QSTRUP SRCFILE(QGL/QCLSRC)

を実行すれば、スタート・アップ・プログラム QSYS/QSTRUP のソースが ライブラリー QGPL のソース・ファイル QCLSRC, メンバー QSTRUPとして 取得することができます。

次は STRSEU QGPL/QCLSRC QSTRUP で SEU 実行時の QSTRUP の内容の一例です。

----------------------------------------------------------------------------------
0001.00 /********************************************************************/
0002.00 /*                                                                  */
0003.00 /* 5763SS1 V3R2M0 960517     RTVCLSRC 出力       99/05/27 14:11:33  */
0004.00 /*                                                                  */
0005.00 /*  プログラム名  . . . . . . . . . . . . . :   QSTRUP            PN*/
0006.00 /*  ライブラリー名  . . . . . . . . . . . . :   QSYS              PL*/
0007.00 /*  元の原始ファイル  . . . . . . . . . . . :                     SN*/
0008.00 /*  ライブラリー名  . . . . . . . . . . . . :                     SL*/
0009.00 /*  元の原始メンバー  . . . . . . . . . . . :                     SM*/
0010.00 /*  原始ファイル変更                                                */
0011.00 /*    日付/時刻  . . . . . . . . . . . . . :                     SC*/
0012.00 /*  パッチ・オプション  . . . . . . . . . . :   *NOPATCH          PO*/
0013.00 /*  ユーザー・プロファイル  . . . . . . . . :   *USER             UP*/
0014.00 /*  テキスト  :                                                   TX*/
0015.00 /*  所有者  . . . . . . . . . . . . . . . . :   QSYS              OW*/
0016.00 /*  パッチ変更 ID . . . . . . . . . . . . . :                     PC*/
0017.00 /*  パッチ APAR ID. . . . . . . . . . . . . :                     PA*/
0018.00 /*  ユーザー変更フラグ  . . . . . . . . . . :   *NO               UM*/
0019.00 /*                                                                ED*/
0020.00 /********************************************************************/
0021.00      PGM
0022.00      DCL VAR(&STRWTRS) TYPE(*CHAR) LEN(1)
0023.00      DCL VAR(&CTLSBSD) TYPE(*CHAR) LEN(20)
0024.00      DCL VAR(&CPYR) TYPE(*CHAR) LEN(90) VALUE('5763-SS1 (C) COPYRIGHT-
0025.00  IBM CORP 1980, 1994. LICENSED MATERIAL - PROGRAM PROPERTY OF IBM')
0026.00      QSYS/STRSBS SBSD(QSPL)
0027.00      MONMSG MSGID(CPF0000)
0028.00      QSYS/RLSJOBQ JOBQ(QGPL/QS36MRT)
0029.00      MONMSG MSGID(CPF0000)
0030.00      QSYS/RLSJOBQ JOBQ(QGPL/QS36EVOKE)
0031.00      MONMSG MSGID(CPF0000)
0032.00      QSYS/STRSBS SBSD(QSNADS)
0033.00      MONMSG MSGID(CPF0000)
0034.00      QSYS/STRSBS SBSD(ENGLISH) /* ENGLISH SBS START BY QTR */
0035.00      MONMSG MSGID(CPF0000)
0036.00      QSYS/STRCLNUP
0037.00      MONMSG MSGID(CPF0000)
0038.00      QSYS/RTVSYSVAL SYSVAL(QSTRPRTWTR) RTNVAR(&STRWTRS)
0039.00      IF COND(&STRWTRS = '0') THEN(GOTO CMDLBL(NOWTRS))
0040.00      QSYS/STRPRTWTR DEV(*ALL)
0041.00      MONMSG MSGID(CPF0000)
0042.00 NOWTRS:
0043.00      QSYS/RTVSYSVAL SYSVAL(QCTLSBSD) RTNVAR(&CTLSBSD)
0044.00      IF COND((&CTLSBSD *NE 'QCTL      QSYS      ') *AND (&CTLSBSD *NE-
0045.00  'QCTL      QGPL      ')) THEN(GOTO CMDLBL(DONE))
0046.00      QSYS/STRSBS SBSD(QINTER)
0047.00      MONMSG MSGID(CPF0000)
0048.00      QSYS/STRSBS SBSD(QBATCH)
0049.00      MONMSG MSGID(CPF0000)
0050.00      QSYS/STRSBS SBSD(QCMN)
0051.00      MONMSG MSGID(CPF0000)
0052.00      QSYS/STRSBS SBSD(QSERVER)
0053.00      MONMSG MSGID(CPF0000)
0054.00 DONE:
0055.00      QSYS/STRTCP
0056.00      MONMSG MSGID(CPF0000)
0057.00      QGPL/STRPNLSVR
0058.00      MONMSG MSGID(CPF0000)
0059.00      SPOOLWTR/STRSPLSVR
0060.00      MONMSG MSGID(CPF0000)
0061.00      STRSBS     SBSD(ASNET.COM/ENTPRSSVR)
0062.00              ASNET.COM/STRHSTSVR TCPIP(*YES 3008)
0063.00              STRTCPSVR  SERVER(*HTTP)
0064.00              DLYJOB     DLY(60)
0065.00              ASNET.COM/STRHTPSVR TCPIP(*YES 3009)
0066.00      RETURN
0067.00      CHGVAR VAR(&CPYR) VALUE(&CPYR)
0068.00      ENDPGM
-----------------------------------------------------------------------------------------

重要な追加部分は DONEタグの後ろの

0055.00      QSYS/STRTCP
0056.00      MONMSG MSGID(CPF0000)

0059.00      SPOOLWTR/STRSPLSVR
0060.00      MONMSG MSGID(CPF0000)

です。
前者は TCP/IP の開始をOS/400 に指示しています。
後者の部分は STRSPLSVR によって Spool ライターのサーバー・デーモンを開始しています。

特に注意が必要であるのは OS/400 V5R1M0 以降です。
V5R1M0 以降では TCP/IP は OS/400によって自動開始されるからといっても
QSTRUP 内部による STRTCP コマンドの実行は必要となります。 なぜなら V5R1M0 以降の TCP/IP の自動開始は、この QSTRUP が実行した後で実行されるからです。
ここに STRSPLSVR を登録しておいても、STRSPLSVR が実行される時点では
TCP/IP はまだ開始されていないことになります。
従ってサーバー・デーモンは SOCKET を作成出来ない旨のエラーとなってしまいます。
このことを避けるにはやはり V5R1M0 以降といえども明示的な
STRTCP による TCP/IPの 開始が必要となってきます。

ユーザー QPGMR に *ALLOBJ権限のない場合の使い方

SPOOLライターVer5.0の改訂によってサーバー開始コマンド: STRSPLSVR に *ALLOBJ権限が
必要になりました。
ユーザー : QPGMR に*ALLOBJ権限を与えずにスタート・アップ・プログラムに入れる方法を
以下に紹介します。

  1. *ALLOBJ権限を持つユーザー・プロフィールを作成する。
    CRTUSRPRF USRPRF(SPOOLWTR) STATUS(*DISABLED) SPCAUT(*ALLOBJ *JOBCTL)
  2. ユーザー QPGMR に 作成したユーザーSPOOLWTR で実行できる権限を与える
    GRTOBJAUT OBJ(SPOOLWTR) OBJTYPE(*USRPRF) USER(QPGMR) AUT(*USE)

      GRTOBJAUT(=オブジェクト権限認可)とはオブジェクトの使用許可を与えるものである。
     ここではQPGMR にSPOOLWTR というユーザー・プロフィールの使用許可を与えていることになる。

  3. QSTRUPの中でコマンドを作成したユーザーでSBMJOBする
    DLYJOB DLY(120)
    SBMJOB CMD(SPOOLWTR/STRSPLSVR) USER(SPOOLWTR)
    MONMSG MSGID(CPF0000)

QSTRUP のコンパイル

上記のような STRTCP と STRSPLSVR の登録が完了すれば

CRTCLPGM QGPL/QSTRUP SRCFILE(QGPL/QCLSRC) AUT(*ALL)

のようにしてコンパイルします。 コンパイルは QSYS にオブジェクトを作成しているのではなく、QGPL に作成していることに注意してください。
将来のOS/400のリリース・アップのことを考慮するのであれば、
システム・ライブラリーである QSYS にユーザー・オブジェクトを作成すべきではありません。

OS/400に多少精通してきても QSYS や IBM によって提供されて導入されている
オブジェクトを変更したり除去したりすると予想できない結果を生じます。
Spool ライター だけでなく多くのソフトウェア製品は IBM提供のオブジェクトを
前提としている場合がありますので、IBM提供のオブジェクトやスプール・ファイルを
絶対に除去したり移動しないでください。

SYSVAL の変更

次に WRKSYSVAL QSTRUPPGM によって
QSYS/QSTRUP として登録されているスタート・アップ をQGPL/QSTRUPに変更します。