サーバー・デーモンを毎日、自動開始させるには?
PC クライアントと IBM i のTCP/IP接続が正常に行なわれていても、毎日の IBM i の IPL 後に
STRTCP や STRSPLSVR の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 を組み込む方法です。
その手順は以下の通りです。
-
CLプログラム:QSYS / QSTRUP の CL原始を取り出す。
RTVCLSRC(原始CL検索)コマンドを次のように使ってCL原始を取り出します。
RTVCLSRC PGM(QSYS/QSTRUP) SRCFILE(QGPL/QCLSRC)既存の CL プログラムの原始も
RTVCLSRC=*YESであれば、
この方法で失われた CL 原始を復元することができます。 -
SEU によってQSTRUPのCL原始を修正する。
STRSEU QGPL/QCLSRC QSTRUP+ 実行キーSEU を起動し、最後の 「RETURN」 命令の直前に、次の 2行を追加します。
STRTCP SPOOLWTR/STRSPLSVR
「 F3=終了 」 で原始を保管します。
-
QSTRUPをコンパイルする。
CRTCLPGM QGPL/QSTRUP SRCFILE(QGPL/QDDSSRC) AUT(*ALL)でプログラム:QSTRUP をライブラリー QGPL に作成します。
-
システム値 : 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権限を与えずにスタート・アップ・プログラムに入れる方法を
以下に紹介します。
-
*ALLOBJ権限を持つユーザー・プロフィールを作成する。
CRTUSRPRF USRPRF(SPOOLWTR) STATUS(*DISABLED) SPCAUT(*ALLOBJ *JOBCTL)
-
ユーザー QPGMR に 作成したユーザーSPOOLWTR で実行できる権限を与える
GRTOBJAUT OBJ(SPOOLWTR) OBJTYPE(*USRPRF) USER(QPGMR) AUT(*USE)
GRTOBJAUT(=オブジェクト権限認可)とはオブジェクトの使用許可を与えるものである。
ここではQPGMR にSPOOLWTR というユーザー・プロフィールの使用許可を与えていることになる。 -
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に変更します。