sge_execd に追加の付加情報を供給するには、負荷センサーを用意する必要があります。負荷センサーには、スクリプトとバイナリ実行ファイルを使用できます。どちらの場合も、負荷センサーの標準入出力ストリームの処理および制御フローは次の規則に従っている必要があります。
負荷センサーは、あるポイントで STDIN からの入力を待機する無限ループとして記述する必要があります。
STDIN から文字列 quit が読み取られた場合、負荷センサーは終了することが想定されています。
STDIN から行末が読み取られるとすぐに、データを読み込むための取得サイクルが開始することが想定されています。
続いて負荷センサーは、目的の負荷値を計算するために必要なすべての処理を実行します。サイクルの終了時点で、負荷センサーは結果を STDOUT に書き込みます。
負荷の取得に長時間を要する場合、負荷レポートを送信した直後に負荷測定プロセスを開始できます。quit が受信されると、負荷値は送信できるようになります。
負荷センサーの規則の書式は次のとおりです。
負荷値のレポートは、単語 begin のみが含まれる行で始まります。
各負荷値は復帰改行で区切られます。
各負荷値は、コロン (:) によって区切られた 3 つの部分から構成され、空白を含みません。
負荷値の最初の部分は、負荷の報告先のホストの名前か、特別な名前 global のいずれか一方です。
負荷センサーの 2 番目の部分は、コンプレックスで定義されている、負荷値の記号名です。詳細については、complex(5) のマニュアルページを参照してください。コンプレックスにエントリのない負荷値が報告された場合、報告された負荷値は使用されません。
負荷センサーの 3 番目の部分は、測定された負荷値です。負荷値レポートは、単語 end が含まれる行で終わります。
次の例に負荷センサーを示します。負荷センサーは Bourne シェルスクリプトです。
#!/bin/sh myhost=`uname -n` while [ 1 ]; do # wait for input read input result=$? if [ $result != 0 ]; then exit 1 fi if [ $input = quit ]; then exit 0 fi #send users logged in logins=`who | cut -f1 -d" " | sort | uniq | wc -l` | sed "s/^ *//" echo begin echo "$myhost:logins:$logins" echo end done # we never get here exit 0 |
このスクリプトを、ファイル load.sh に保存します。chmod コマンドを使用して、このファイルに実行可能権限を割り当てます。コマンド行からスクリプトを対話形式でテストするには、load.sh と入力し、Return キーを繰り返し押します。
手続きが機能するようになるとすぐ、任意の実行ホストにインストールできます。手続きをインストールするには、クラスタ構成、グローバル構成、またはホスト固有の構成の load_sensor パラメータとして、負荷センサーのパスを構成します。詳細については、「基本クラスタ構成」または sge_conf(5) のマニュアルページを参照してください。
対応する QMON ウィンドウは次の図のようになります。
報告される負荷パラメータ logins は、対応する属性がコンプレックスに追加されるとすぐに使用できるようになります。必要な定義は、次の図に示す最後のテーブルエントリのようになります。