Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - データベース管理 » データベースの起動とデータベースへの接続 » データベース・サーバの実行 » 現在のセッション外でのサーバの起動

 

デーモンとしての UNIX データベース・サーバの稼働

UNIX データベース・サーバをバックグラウンドで実行し、現在のセッションから独立して稼働させるには、データベース・サーバを「デーモン」として実行します。

データベース・サーバをバックグラウンドで実行するのに '&' を使用しない

データベース・サーバをバックグラウンドで実行するのに UNIX の & (アンパサンド) コマンドを使用しても機能しません。サーバがただちに停止するか応答しなくなります。データベース・サーバはデーモンとして実行してください。

同様に、一般的な fork()-exec() シーケンスを使用してプログラムの中からサーバをバックグラウンドで起動しようとしても機能しません。これを行うには、データベース・サーバ・オプションのリストに -ud オプションを追加します。

UNIX データベース・サーバは、次のいずれかの方法でデーモンとして実行できます。

  1. データベース・サーバの起動時に、-ud オプションを使用する。次に例を示します。

    dbsrv11 -ud demo
  2. dbspawn ツールを使用してデータベース・サーバを起動する。次に例を示します。

    dbspawn dbsrv11 demo

    dbspawn を使用することの利点は、デーモンが起動し、要求を受け入れる状態になったことを確認するまで dbspawn プロセスが停止しないことです。何らかの理由でデーモンの起動が失敗した場合、dbspawn の終了コードは 0 以外の値になります。

    -ud オプションを使用してデーモンを直接起動した場合は、dbeng11 コマンドと dbsrv11 コマンドがデーモン・プロセスを作成し、(終了して次のコマンドを実行できるように) すぐに返します。その後、デーモンがそれ自体を初期化するか、コマンドで指定されたデータベースを開こうとします。

    データベース・サーバを使用するアプリケーションでデーモンの実行を確実にしたい場合、アプリケーションの起動前にデーモンを実行する dbspawn を使用します。次の例では、csh スクリプトを使用してこれをテストする方法を示します。

    #!/bin/csh
    # start the server as a daemon and ensure that it is
    # running before you start any applications
    dbspawn dbsrv11 demo
    if ( $status != 0 ) then
       echo Failed to start demo server
       exit
    endif
    # ok, now you can start the applications
    ...

    次の例では、sh スクリプトを使用して、アプリケーションの起動前にデーモンが実行中であるかどうかをテストします。

    #!/bin/sh
    # start the server as a daemon and ensure that it is
    # running before you start any applications
    dbspawn dbsrv11 demo
    if [ $? != 0 ]; then
       echo Failed to start demo server
       exit
    fi
    # ok, now you can start the applications
    ...
  3. C プログラムの中からデーモンを生成する。次に例を示します。

    ...
    if( fork() == 0 ) {
          /* child process = start server daemon */
          execl( "/opt/sqlanywhere11/bin/dbsrv11",
    "dbsrv11", "-ud", "demo" );
       exit(1);
    }
    /* parent process */
    ...

    -ud オプションが使用されていることに注意してください。

参照