E.4. ログインスクリプトのタイムアウト時間

SGD では、アプリケーションの起動時にいくつかのタイムアウト時間が使用されます。次のタイムアウト時間が用意されています。

注記

Microsoft Windows アプリケーションを起動したときに、実行プロトコルエンジンを除くすべてのタイムアウトを適用しません。

E.4.1. Expect のタイムアウト時間

Expect のタイムアウト時間は vars.exp ログインスクリプトで定義されます。次の表に、使用可能な Expect のタイムアウト時間とそのデフォルト値を示します。

タイムアウト

デフォルト値

timeouts(hostprobe)

30 秒

timeouts(prelogin)

40 秒

timeouts(loggedin)

20 秒

Expect スクリプトのタイムアウト時間を超過すると、スクリプトはプロンプトの推測を試みてアプリケーションの起動処理を継続します。

timeouts(hostprobe)

timeouts(hostprobe) タイムアウトは、unix.exp ログインスクリプトから呼び出されます。これは ttahostprobe バイナリからの応答を待つ時間です。ttahostprobe バイナリは、アプリケーションサーバーが使用可能かどうかを確認するために使用されます。

ttahostprobe バイナリは応答を標準出力 (stdout) に出力し、成功の場合は y を、失敗の場合は n を返します。

timeouts(prelogin)

ログインフェーズで、必要な文字列の照合のため、各 Expect コマンドに対して許可される時間。

たとえば、アプリケーションサーバーとの接続の確立後、スクリプトがログインプロンプトの照合に使用できる時間は、デフォルトで 40 秒です。これが経過するとタイムアウトとなります。照合が成功するたびに、タイマーはリセットされます。ログイン中、タイムアウト時間は通常、ログインプロンプト、パスワードプロンプト、およびシェルプロンプトの処理ごとにリセットされます。

このタイムアウト時間を増やすと、ログインの各フェーズに許可される時間も増えます。このタイムアウト時間は、ログインの最長のフェーズを完了できるように、十分に大きな値に設定する必要があります。

このタイムアウト時間を超過すると、スクリプトは「ログイン状態にあり、シェルプロンプトの照合に失敗した」と判断し、アプリケーションサーバーに「echo SYNC」を送信してプロンプト文字列を推測します。タイマー時間を超過したときにユーザーがログインしていないと、アプリケーションの起動に失敗します。そうでない場合は、「echo SYNC」の直後にアプリケーションサーバーが送信した値がシェルプロンプトに設定され、起動処理が引き続き実行されます。

注記

echo SYNC」が表示され、シェルプロンプトが $%#、または > で正常に終了する場合は、timeouts(prelogin) 値が短すぎます。

timeouts(loggedin)

ユーザーのログイン後、必要な文字列の照合のため、各 Expect コマンドに対して許可される時間。

タイムアウト時間を超過すると、スクリプトは次のコマンドに移行します。それが原因で、プロンプトが返される前にコマンドが送信される場合があります。

このタイムアウトがよく発生するのは、スクリプトでのシェルプロンプトの設定が間違っている場合です。そのような場合、デフォルトでは各コマンドは 20 秒待ってから次のコマンドに移行し、クライアントタイマーのいずれか 1 つをトリガーすることができます。

E.4.2. クライアントタイマー

クライアントタイマーは、clienttimer Tcl コマンドを使って設定します (E.2.2項「 clienttimer 」を参照)。クライアントタイマーの時間を超過すると、致命的な ErrApplicationServerTimeout エラーでアプリケーション起動が取り消されます。

クライアントタイマーは vars.exp ログインスクリプトで定義されます。

次の表に、使用可能なクライアントタイマーとそのデフォルト値を示します。

タイマー

デフォルト値

timers(login)

timeouts(prelogin) + 10 秒

timers(env)

40 秒

timers(runmain)

40 秒

timers(build)

25 秒

timers(total)

5 秒

timers(login)

ログインフェーズが完了するまで (接続の確立から最初のシェルプロンプトの受信まで) の総時間。

この timers(login) タイマーは、すべてのログインフェーズをカバーできるだけの十分な長さでなければなりません。ログインの各フェーズ (ログインプロンプト、パスワードプロンプト、シェルプロンプト) は、最大で、timeouts(prelogin) タイムアウトに対して定義された秒数だけ継続する可能性があります。このタイマーの値は、常に Expect のタイムアウト時間 timeouts(prelogin) より大きくなければなりません。

Expect のタイムアウト時間 timeouts(prelogin) を増やす場合は、timers(login) タイマーも増やして、その差を 10 以上に保つようにしてください。

timers(env)

最初のシェルプロンプトを受信してからアプリケーションサーバーの環境変数がすべてエクスポートされるまでの総時間。

timers(runmain)

最後の環境変数が設定されてからメインアプリケーションが起動されるまでの総時間。

timers(build)

実行対象のコマンド行の作成にかかる総時間。このタイマーは、SCO Merge プロトコルを使用している Windows アプリケーションを起動する場合にのみ使用されます。

注記

SCO Merge プロトコルのサポートは終了しており、従来の SGD Windows アプリケーションオブジェクトでのみ使用できます。

timers(total)

クライアントタイマーの総数。この設定は、クライアントタイマーを追加または削除する場合に変更します。

E.4.3. その他のタイムアウト時間

procs.exp ログインスクリプトには、コマンドの発行時の 3 秒のタイムアウト時間が含まれています。これは proc wait_for_prompt プロシージャーで定義されます。

実行プロトコルエンジンのデフォルトのタイムアウト時間は 180 秒 (3 分) です。このタイムアウト時間は、アプリケーションの起動要求を受信したときに起動され、アプリケーションの起動処理が正常終了すると削除されます。このタイムアウト時間を超過すると、アプリケーションの起動処理が取り消されます。このタイムアウト時間は、各 SGD サーバーに固有の値です。

このタイムアウト時間を変更するには、次のコマンドを使用します。

$ tarantella config edit \
--tarantella-config-execpeconfig-maxlaunchtime secs
注記

このタイムアウト時間をアレイ内のすべての SGD サーバーについて変更するには、このコマンドで --array オプションを使用します。