Web開発のための基礎知識

HTTPサーバーの起動

ようやくTCP/IP関連の基礎や操作の前提がわかったところで HTTPサーバーを起動させてみましょう。

STRTCP によって TCP/IP が起動するところまでは学習しました。ところで STRTCPF4 キーを押すと

                                TCP/IP の開始  (STRTCP)         
                                                                
     選択項目を入力して,実行キーを押してください。             
                                                                
                                                                
                      追加のパラメーター                        
                                                                
     適用業務サーバーの開始  . . . .   *YES          *YES, *NO  
    TCP/IP インターフェースの開始      *YES          *YES, *NO  

と表示されますので、適用業務サーバー、つまりFTP やTelnet は開始されますがHTTPサーバーは
STRTCP コマンドによっては開始されません。
これは例えば FTPサーバーであれば CHGFTPAF4 キーを押すと、

                              FTP 属性の変更  (CHGFTPA)                          
                                                                                 
    選択項目を入力して,実行キーを押してください。                               
                                                                                 
    自動開始サーバー  . . . . . . .   *YES          *YES, *NO, *SAME             
    初期サーバー数  . . . . . . . .   3             1-20, *SAME, *DFT            
    非活動タイムアウト  . . . . . .   300           0-2147483647, *SAME, *DFT    
    コード化文字セット ID . . . . .   00819         1-65533, *SAME, *DFT         
   ナーブー、uョペ]h゙、mーボモ:                                                          
     EBCDIC/ASCII mーボモ の発信  . .   *CCSID         名前 , *SAME, *CCSID, *DFT  
        ライブラリー  . . . . . . .                  名前 , *LIBL, *CURLIB       
                                                                                 
     ASCII/EBCDIC mーボモ の受信  . .   *CCSID         名前 , *SAME, *CCSID, *DFT  
        ライブラリー  . . . . . . .                  名前 , *LIBL, *CURLIB       
    初期名の形式  . . . . . . . . . > *LIB          *LIB, *SAME, *PATH        
    初期ディレクトリー  . . . . . . > *CURLIB       *CURLIB, *SAME, *HOMEDIR  
    初期リストの形式  . . . . . . .   *DFT          *DFT, *SAME, *UNIX           
    新規ファイル CCSID  . . . . . .   *CALC         1-65533, *SAME, *CALC...     
    サブシステム記述  . . . . . . .   QSYSWRK        名前 , *SAME, *DFT          
      ライブラリー  . . . . . . . .     QSYS         名前                        

のように 「 自動開始サーバー = *YES が導入時の値として設定されているからです。
しかし、HTTPサーバーに関しては CHGHTTPAF4 キーを押して確認してみると

                             HTTP 属性の変更  (CHGHTTPA)                          
                                                                                  
    選択項目を入力して,実行キーを押してください。                                
                                                                                  
    自動開始  . . . . . . . . . . . > *NO           *YES, *NO, *SAME           
    サーバー・スレッドの数 :                                                      
      最小  . . . . . . . . . . . .   10            1-9999, *SAME, *DFT           
      最大  . . . . . . . . . . . .   40            1-9999, *SAME, *DFT, *NOMAX   
    コード化文字セット識別コード      00819         1-65533, *SAME, *DFT          
   SERVER マッピング・テーブル :                                                  
     EBCDIC/ASCII テーブルの発信      *CCSID         名前 , *SAME, *CCSID, *DFT   
        ライブラリー  . . . . . . .                  名前 , *LIBL, *CURLIB        
                                                                                  
     ASCII/EBCDIC TABLE の受信  . .   *CCSID         名前 , *SAME, *CCSID, *DFT   
        ライブラリー  . . . . . . .                  名前 , *LIBL, *CURLIB        

のように 「 自動開始 = *NO となっているために STRTCPコマンドによっては直ちに開始することはありません。
また、上記のコマンドによってパラメーターがすべて 「*SAME」 としか表示されていない場合は現在使用している
あなたのユーザー・プロフィールには *IOSYS 権限がありません。
その場合は QSECOFRでログインしてから再表示してください。

自動開始 = *NO の場合は STRTCPSVRF4 キーを押して、

                         TCP/IP サーバーの開始  (STRTCPSVR)             
                                                                        
    選択項目を入力して,実行キーを押してください。                      
                                                                        
    サーバー適用業務  . . . . . . .   *http         *ALL, *AUTOSTART... 
                   値の続きは+                                         

によって HTTPサーバーを開始します。
ただしコード化文字セットは CHGHTTPA によってCCSID = 00819 から CCSID = 00932
変更しておいてください。( Alska を HTTPサーバーとして利用する場合はこの必要はありません。)

WRKACTJOB によってJOBを確認するとサブ・システム QHTTPSVR の配下にしばらくすると、次のように
サーバー・スレッドが表示されます。

                                  活動ジョブの処理                        S103NG3M 
                                                                03/11/09  15:09:42 
    CPU %:   10.2     経過時間 :   00:00:23     活動ジョブ数 :   164               
                                                                                   
    オプションを入力して,実行キーを押してください。                               
      2= 変更   3= 保留     4= 終了   5= 処理   6= 解放   7=メッセージ の表示          
      8=スプール・ファイル の処理   13= 切断 ...                                           
                                                                                   
    OPT  サブシステム/ジョブ   ユーザー   タイプ  CPU %   機能            状況             
         QHTTPSVR       QSYS        SBS      .0                   DEQW             
           DEFAULT      QTMHHTTP    BCH      .4  PGM-QZHBHTTP     CNDW             
           DEFAULT      QTMHHTTP    BCI      .0  PGM-QZHBHJOB     TIMW             
           DEFAULT      QTMHHTTP    BCI      .0  PGM-QZHBHJOB     TIMW             
           DEFAULT      QTMHHTTP    BCI      .0  PGM-QZHBHJOB     TIMW             
           DEFAULT      QTMHHTTP    BCI      .0  PGM-QZHBHJOB     TIMW             

「しばらくすると」と申し上げたのは一般的にHTTPサーバーは「マルチスレッド」のJOBであるので待機に
なるまでは時間がかかります。従って STRTCPSVR *HTTP を実行したからといって直ちにHTTPサーバーが
使用可能で接続できるわけではありません。
必ず WRKACTJOB によってスレッドが TIMW のように待機状態になることを確認するようにしてください。

この WRKACTJOB を眺めてみると状況が最上部のJOBだけが「CNDW」になっており、その下に続く JOB は
すべて TIMW になっていることがわかります。
しかも機能の欄を見ると最上部は PGM-QZHBHTTP になっていますが、その他はPGM-QZHBHJOB と表示されています。
つまり HTTPサーバーとは QZHBHTTP だけであり、その他の QZHBHJOB はHTTPサーバーの子プロセスです。

これは最上部のHTTPサーバーだけが親スレッドとして、ブラウザなどのクライアントからの要求を待ち続け、
CGI などの実行が要求されれば、下位の子プロセスに処理を渡して下位のJOBにCGI の実行などをさせる役割を
担っています。

CGI の結果は再び、HTTPサーバーに戻されてHTTPサーバーがそれから、ブラウザにCGIの結果を戻すような
仕組みになっています。どの子プロセスに CGI を実行させるかはHTTPサーバーが不定期に決めますので
必ずしも上から順次にCGIが実行されるわけではありません。

つまり今後のWeb開発において CGI のトラブルの調査では CGI を実行した子プロセスを「 5 = 処理 」
選択して、「10. ジョブ・ログの表示」 を選択し、カーソルを位置づけてから「 F10 = 詳細メッセージの表示」 を押して、

                                  ジョブ・ログ表示                                
                                                                  システム:   S103NG3M
    ジョブ . :   DEFAULT       ユーザー  . :   QTMHHTTP       番号  . . . :   094161  
                                                                                  
        QHTTPSVR のサブシステム QHTTPSVR のジョブ 094161/QTMHHTTP/DEFAULT が      
          03/11/09 07:10:17 に開始された。ジョブは 03/11/09 07:10:16  にシステム  
           に入れられました。                                                     
         これは, IBM HTTP SERVER インスタンス DEFAULT の CGI ジョブである。      
         ライブラリー SPOOLWTR がライブラリー・リストに追加された。               
         印刷装置 PRT01 が見つからない。出力待ち行列がライブラリー QGPL の        
          QPRINT に変更されました。                                               
         テーブル QA3TBF437 が見つからない。                                      
         テーブル QA3TBF437 が見つからない。                                      
         ファイル /AS400-NET.USR/PROJECT/SMPRINT/P057084.PDF を出力しました。     
         ライブラリー SPOOLWTR がライブラリー・リストから除去された。             
         ライブラリー R520FIL がライブラリー・リストに追加された。                
         ライブラリー ASNET.COM がライブラリー・リストに追加された。              

のようにして詳細ログを表示させることがとても重要です。
この「カーソルを行に位置づけてからF10キー」を押すという操作を最近のSEでもご存知ない方が多くなっている
ために、真のエラー原因を調査できないでいるようです。
この操作は HTTPサーバーの調査だけではなく、一般の System i における問題の分析には非常に重要ですので
是非、覚えておいてください。

また、最新のOS/400などでは HTTPサーバーはサブシステム QHHPSVR の配下で起動しますが古いリリースでは
サブシステム QSYSWRK の配下で起動されます。QHTTPSVR配下で起動されるのは V4R4M0 以降 です。