過去のナビゲーションリンクのスキップSecure Global Desktop 4.40 管理者ガイド > ユーザーと認証 > ログインスクリプトでのタイムアウト値の増加

ログインスクリプトでのタイムアウト値の増加

特に低速なアプリケーションサーバー上でアプリケーションを実行した場合、SGD がアプリケーションの起動に失敗し、ErrApplicationServerTimeout エラーを報告することがあります。

この問題は、vars.exp ログインスクリプトでタイムアウト時間を増やすことにより解決できます。

タイムアウト値は、Expect のタイムアウト時間、クライアントタイマー、およびその他のタイムアウトに分割できます。

アプリケーションサーバーが低速な場合は、最初に Expect のタイムアウト時間を増やしてください。起動が依然として失敗する場合は、いずれかのクライアントタイマーが短すぎる可能性があります。起動が特に遅い場合は、すべてのクライアントタイマーを増やしてください。

タイムアウト値を増やすと、アプリケーションの開始に時間がかかります。タイムアウト値を変更するのは問題が発生している場合だけにし、アプリケーションサーバーの能力に合わせてタイムアウト値を調整してください。

実行プロトコルエンジンのタイムアウト時間を除き、このページで説明されているタイムアウト時間はどれも、Microsoft RDP プロトコルを使用するように設定された Microsoft Windows アプリケーションの起動時には適用されません。

Expect のタイムアウト時間

次の表に、使用可能な 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秒 (timeouts(prelogin) のデフォルト値) です。これが経過するとタイムアウトとなります。照合が成功するたびに、タイマーはリセットされます。ログイン中、タイムアウト時間は通常、ログインプロンプト、パスワードプロンプト、およびシェルプロンプトの処理ごとにリセットされます。

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

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

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

timeouts(loggedin)

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

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

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

クライアントタイマー

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

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

タイマー デフォルト値
timers(login) timeouts(prelogin) + 10
timers(env) 40 秒
timers(runmain) 40 秒
timers(build) 25 秒
timers(total) 5 秒

timers(login)

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

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

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

timers(env)

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

timers(runmain)

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

timers(build)

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

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

timers(total)

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

その他のタイムアウト時間

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

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

過去のコマンド構文またはプログラムコードのスキップ$ tarantella config edit \
  --tarantella-config-execpeconfig-maxlaunchtime secs

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

関連トピック