Sun N1 Grid Engine 6.1 管理ガイド

第 8 章 そのほかの管理作業

この章では、ファイルやスクリプトを使用して、キュー、ホスト、および環境などの Grid Engine システムのオブジェクトを追加または変更する方法について説明します。

この章で説明する内容は、次のとおりです。

アカウンティングおよびレポート統計の収集

Grid Engine システムには、2 種類のレポートとアカウンティングの機能が用意されています。

レポート統計 (ARCo)

オプションのアカウンティングおよびレポートコンソール (ARCo) を使用すると、Grid Engine システムから実際のアカウンティングとレポートのデータを収集し、標準的な SQL データベースであるレポートデータベースにデータを格納できます。ARCo は、次の SQL データベースシステムをサポートしています。

また ARCo には、レポートデータベースに関する情報クエリを収集し、表形式またはグラフィック形式で結果を取得するための、Web ベースのツールが用意されています。ARCo を使用すると、あとに使用できるようクエリを格納し、定義済みのクエリを実行し、バッチモードでクエリを実行することができます。ARCo の使用法の詳細については、『Sun N1 Grid Engine 6.1 ユーザーズガイド』の第 5 章「アカウンティングとレポート」を参照してください。ARCo のインストール方法の詳細については、『Sun N1 Grid Engine 6.1 インストールガイド』の第 8 章「アカウンティングおよびレポートコンソールのインストール」を参照してください。

生のレポートデータは sge_qmaster により生成されます。この raw データはレポートファイルに格納されます。dbwriter プログラムはレポートファイルの raw データを読み取り、SQL レポートデータベースにそのデータを書き込みます。SQL レポートデータベースは ARCo によりアクセス可能です。

dbwriter プログラムについて

dbwriter プログラムは、次のタスクを実行します。

dbwriter は、起動時に、派生値を計算します。また、dbwriter は起動時に、期限切れレコードの削除も行います。dbwriter が継続モードで実行中である場合、dbwriter は継続して、1 時間ごとの間隔またはユーザーが指定する間隔で、派生値を計算し、期限切れレコードを削除します。

XML ファイルで、計算する値と削除するレコードを指定できます。この XML ファイルのパスを指定するには、dbwriter コマンドの -calculation オプションを使用します。

派生値の計算の詳細については、「dbwriter を使用した派生値の計算」を参照してください。

期限切れレコードの削除の詳細については、「dbwriter を使用した期限切れレコードの削除」を参照してください。

レポートファイルの有効化

レポートファイルには次の種類のデータが含まれています。

Grid Engine システムを最初にインストールした時点では、レポートファイルは使用不可になっています。ARCo を使用するためには、クラスタに対してレポートファイルを使用可能にする必要があります。使用可能にすると、レポートファイルは sge_qmaster により生成されます。デフォルトでは、レポートファイルの位置は sge-root/ cell/common です。dbwriter コマンドの -reporting オプションを使用すると、デフォルトを変更できます。

レポートファイルの生成の構成については、sge_conf(5) のマニュアルページの reporting_params パラメータ、および host_conf(5) のマニュアルページの report_variables パラメータを参照してください。

QMON でレポートファイルを使用可能にするには、「Main Control」ウィンドウで「Cluster Configuration」ボタンをクリックし、「global」ホストを選択してから「Modify」をクリックします。

「Cluster Settings」ダイアログボックスで「Advanced Settings」タブをクリックします。

「Reporting Parameters」フィールドでは次のパラメータを設定します。

コマンド行からレポートファイルを使用可能にするには、上記の説明のように、qconf –mconf コマンドを使用して reporting_params 属性を設定します。

レポートファイルが使用可能になれば、dbwriter はレポートファイルから raw データを読み取り、それをレポートデータベースに書き込むことができるようになります。

レポートファイルの構成の詳細については、 reporting(5) のマニュアルページを参照してください。ARCo のインストールと設定の詳細については、『Sun N1 Grid Engine 6.1 インストールガイド』の第 8 章「アカウンティングおよびレポートコンソールのインストール」を参照してください。

dbwriter を使用した派生値の計算

派生値を計算するための規則は、DbWriterConfig タグのサブタグである派生タグで指定します。次の表に、派生タグの属性を示します。

属性

説明

object

データを集計する対象のオブジェクト。オブジェクトは次のいずれかです。

  • ホスト

  • キュー

  • プロジェクト

  • 部署

  • ユーザー

  • グループ

interval

派生値を計算する頻度を指定する時間範囲です。時間範囲は次のいずれかです。

  • hour

  • day

  • month

  • year

variable

計算済みのデータを保持する変数の名前です。

次の表に、派生タグのサブ要素を示します。

sql

派生値を計算する SQL 文です。この文は次のカラムを作成する必要があります。

  • time_start – time_end とともに、計算済みの値の期間を指定します。

  • time_end

  • value – 計算済みの派生値

SQL 文は次のプレースホルダを含むことができます。dbwriter は、規則に基づいて各クエリのプレースホルダを次のように置換します。

  • __time_start__ – クエリーの開始時間。dbwriter は、この規則から、直前に計算された最後の派生値を検索し、このタイムスタンプを次のクエリーの開始時間として使用します。

  • __time_end__ – クエリーの終了時間。このタイムスタンプは、最後に経過した時間範囲の終了を指定します。たとえば、時間範囲が day であり、派生値が 00:30 で計算された場合、00:00 が time_end として取得されます。

  • __key_0__, __key_1__, . , __key_n__ – 指定したオブジェクト型の主キーのコンポーネント。たとえば、sge_hosts テーブルには主キー h_hostname があります。ホストオブジェクト型に対して規則が処理された場合、sge_hosts テーブル内のエントリごとに 1 つのクエリーが実行され、SQL 文内の __key_0__ プレースホルダはホスト名により置き換えられます。

    sge_queue テーブルは、q_qname および q_hostname から構成された複合的な主キーを持ちます。

auto

dbwriter は、派生値の計算用の SQL 文を生成します。

自動生成された SQL 文は、次のテンプレートのようになります。


SELECT time_start, time_end, <function>(<value_field>) as value
FROM ( SELECT TRUNC( <timestart_field>, <interval> ) as time_start
              TRUNC( <timestart_field>, <interval> ) +
                    INTERVAL '1' <interval> as time_end,
              <value_field>
       FROM <object value table>
       WHERE <primary key field 0> = __key_0__
         AND <primary key field 1> = __key_1__
         AND . . .
         AND <parent key field> =
             (SELECT <parent key field> FROM <parent table>
              WHERE <parent filter> )
         AND <timestart_field> <= {ts __time_start__ }
         AND <timeend_field>   >  {ts __time_end__ }
GROUP BY time_start, time_end

SQL テンプレートパラメータには次のものがあります。

パラメータ

説明

<function>

派生値を計算するための集計関数です。XML ファイルの auto タグの関数属性に由来します。

<value_field>

派生値のオブジェクトに依存します。

<timestart_field>

派生値のオブジェクトに依存します。

<timeend_field>

派生値のオブジェクトに依存します。

<interval>

派生タグの内部属性に由来します。

<object value table>

値が格納されるデータベーステーブルの名前です。オブジェクトに依存します (host => host_values, user => user_values, . )。

<primary key field n>

値テーブルを親テーブルに結合するのに必要な主キーです。オブジェクトに依存します。

<parent key field>

親の ID を保持するフィールドの名前です。オブジェクトに依存します。

<parent table>

親データベーステーブルの名前です。オブジェクトに依存します (host => host, user => user)。

<parent filter>

親テーブル用のフィルタです。親テーブルの各エントリの派生値が計算されます (例: u_user = 'user1')。

自動生成された SQL 文の例を次に示します。


<derive object="host" interval="day" variable="d_load">
   <auto function="AVG" variable="h_load" />
</derive>

SELECT time_start, time_end, AGE(hv_dvalue)
FROM ( SELECT TRUNC( hv_time_start, 'day' ) as time_start,
              TRUNC( hv_time_start, 'day' ) +
                             INTERVAL '1' day as time_end,
              hv_dvalue
       FROM sge_host_values
       WHERE hv_variable = 'h_load' AND
             hv_parent =
               (SELECT h_id FROM sge_host
                WHERE h_hostname = 'foo.bar') AND
             hv_time_start <= {ts '2004-05-21 00:00:00.0'} AND
             hv_time_end    > {ts '2004-05-17 00:00:00.0'} )
GROUP BY time_start, time_end

dbwriter を使用した期限切れレコードの削除

レポートデータベースで期限切れレコードを削除するには、削除タグで削除規則を指定する必要があります。次の表に、削除タグの属性を示します。

属性

説明

scope

削除するデータの型です。有効なエントリには次のものがあります。

  • job

  • job_log

  • share_log

  • host_values

  • queue_values

  • project_values

  • department_values

  • user_values

  • group_values

time_range

time_amount の単位です。

time_amount

レコードを保持する単位 (time_range) の数です。

次の表に、削除タブのサブ要素を示します。

sub_scope

一部のスコープに関しては、サブスコープを構成できます。サブスコープは、削除の追加条件を指定します。サブスコープは、すべての *_values スコープと、share_log スコープに対して構成できます。

サブスコープが *_values 規則に対して構成されている場合、そのサブスコープには、空白で区切られた、削除する変数のリストが含まれています。

サブスコープが share_log に対して指定されている場合、そのサブスコープには、空白で区切られた、削除する共有ツリーノードのリストが含まれています。

サブスコープを使用する場合、サブスコープにより明示的に名前が付けられていないすべてのオブジェクトを削除する、サブスコープのないフォールバック規則を常に用意する必要があります。

削除タグの例を次に示します。


<?xml version="1.0" encoding="UTF-8"?>
<DbWriterConfig>
  <!-- keep host values for 2 years -->
  <delete scope="host_values" time_range="year" time_amount="2"/>

  <!-- keep queue values one month -->
  <delete scope="queue_values" time_range="month" time_amount="1">
    <sub_scope>slots</sub_scope>
    <sub_scope>state</sub_scope>
  </delete>
</DbWriterConfig>

アカウンティングおよび使用率の統計 (qacct)

qacct コマンドを使用すると、英数字のアカウンティング統計を生成できます。オプションを指定しないと、qacct により、完了したすべてのジョブによって生成され、クラスタアカウンティングファイル sge-root/cell/common/accounting に含まれている、クラスタのすべてのマシンに関する使用率集計情報が表示されます。この場合、qacct は秒単位で次の 3 つの時間を報告します。

キューあるいはユーザーなどに関するアカウンティング情報の報告に、いくつかのオプションを使用可能です。特に、qacct -l コマンドを使用すると、すでに完了していて、リソース要求指定に一致するすべてのジョブに関する情報を要求できます。

qacct -j [job-id | job-name] コマンドを使用すると、Grid Engine システムによって格納された、リソース使用率情報の全体に直接アクセスできます。 この情報には、getrusage システムコールにより提供された情報が含まれています。

-j オプションは、job-id または job-name を持つジョブのリソース使用率エントリを報告します。引数なしで実行された場合は、参照されたアカウンティングファイルに含まれるすべてのジョブが表示されます。ジョブ ID が指定され、複数のエントリが表示された場合は、次のいずれかが真になります。

詳細については、qacct(1) のマニュアルページを参照してください。

Grid Engine システム構成のバックアップ

Grid Engine システムの構成ファイルを自動的にバックアップすることができます。自動バックアッププロセスでは、backup_template.conf という名前の構成ファイルを使用します。デフォルトでは、バックアップ構成ファイルの位置は sge-root/util/install_modules/backup_template.conf です。

バックアップ構成ファイルでは、次の要素を定義する必要があります。

バックアップテンプレートファイルは、次の例のようになります。


##################################################
# Autobackup Configuration File Template
##################################################

# Please, enter your SGE_ROOT here (mandatory)
SGE_ROOT=""

# Please, enter your SGE_CELL here (mandatory)
SGE_CELL=""

# Please, enter your Backup Directory here
# After backup you will find your backup files here (mandatory)
# The autobackup will add a time /date combination to this dirname
# to prevent an overwriting!
BACKUP_DIR=""

# Please, enter true to get a tar/gz package
# and false to copy the files only (mandatory)
TAR="true"

# Please, enter the backup file name here. (mandatory)
BACKUP_FILE="backup.tar" 

自動バックアッププロセスを開始するには、sge_qmaster ホストで次のコマンドを入力します。


inst_sge -bup -auto backup-conf

backup-conf は、バックアップ構成ファイルのフルパスです。


注 –

構成ファイルをバックアップする前に Grid Engine システムデーモンを停止する必要はありません。


バックアップは、BACKUP_FILE により指定されたディレクトリに作成されます。このディレクトリには、install.pid という名前のバックアップログファイルも作成されます。pid はプロセス ID 番号です。

Procedure手動バックアップを実行する

  1. 次のコマンドを入力して、手動バックアップを開始します。


    inst_sge -bup
  2. <sge-root> ディレクトリを入力するか、デフォルトをそのまま使用します。


    SGE Configuration Backup
    ------------------------
    
    This feature does a backup of all configuration you made
    within your cluster.
    Please enter your SGE_ROOT directory.
    Default: [/home/user/ts/u10]
  3. <sge-cell> 名を入力するか、デフォルトをそのまま使用します。


    Please enter your SGE_CELL name. Default: [default]
  4. バックアップの作成先のディレクトリを入力するか、デフォルトをそのまま使用します。


    Where do you want to save the backupfiles?
    Default: [/home/user/ts/u10/backup]
  5. 圧縮形式の tar バックアップファイルを作成するかどうかを選択します。

    使用している tar のバージョン (gnu tar/ solaris tar) が異なると、このオプションで問題が起きることがあります。場合によっては、tar パッケージが壊れていることがあります。圧縮および圧縮解除を問題なく行うには、同じ tar バイナリを使用してください。


    Shall the backup function create a compressed tarpackage with your files? (y/n) [y] >>
  6. バックアップファイルの名前を入力します。デフォルトが示されます。


    ... starting with backup
    
    
    Please enter a filename for your backupfile. Default: [backup.tar] >>
  7. バックアップが実行され、その情報が表示されます。


    2007-01-11_22_43_22.dump
    bootstrap
    qtask
    settings.sh
    act_qmaster
    sgemaster
    settings.csh
    sgeexecd
    jobseqnum
    
    ... backup completed
    All information is saved in
    [/home/user/ts/u10/backup/backup.tar.gz[Z]]

Procedureバックアップから復元する

始める前に

復元作業を開始する前に qmaster デーモンを停止してください。復元中にスプーリングデータベースが変更され、復元機能と qmaster が同じデータにアクセスしようとしていると、データが失われることがあります。

  1. 次のコマンドを入力して、復元作業を開始します。


    inst_sge -rst 
  2. 画面のメッセージを読んで、対応します。


    SGE Configuration Restore
    -------------------------
    
    This feature restores the configuration from a backup you made
    previously.
    
    Hit, <ENTER> to continue!
  3. <sge-root> ディレクトリを入力するか、デフォルトをそのまま使用します。


    Please enter your SGE_ROOT directory.
    Default: [/home/user/ts/u10]
  4. <sge-cell> 名を入力するか、デフォルトをそのまま使用します。


    Please enter your SGE_CELL name. Default: [default]
  5. バックアップファイルの形式を確認します。

    バックアップファイルが、圧縮形式の tar ファイルでないことがあります。


    Is your backupfile in tar.gz[Z] format? (y/n) [y]
  6. バックアップファイルへのフルパスを入力します。


    Please enter the full path and name of your backup file.
    Default: [/home/user/ts/u10/backup/backup.tar.gz]
  7. スプーリングデータベースの情報を確認します。

    復元機能はバックアップファイルを圧縮解除し、システム情報を読み取ります。データが失われないようにするには、適切なスプーリングデータベースが検出されていることを確認します。


    Copying backupfile to /tmp/bup_tmp_22_51_40
    
    /home/user/ts/u10/backup/backup.tar.gz
    2007-01-11_22_43_22.dump
    bootstrap
    qtask
    settings.sh
    act_qmaster
    sgemaster
    settings.csh
    sgeexecd
    jobseqnum
    
    Spooling Method: berkeleydb detected!
    
    
    The path to your spooling db is [/tmp/dom/spooldb]
    If this is correct hit <ENTER> to continue, else enter the path. >>
  8. qmaster を再起動します。

管理作業用のファイルとスクリプトの使用法

この節では、ファイルとスクリプトを使用して、キュー、ホスト、環境などの Grid Engine システムのオブジェクトを追加または変更する方法を説明します。

Grid Engine システムでのすべての管理作業の実行には、QMON グラフィカルユーザーインタフェースを使用できます。また、シェルプロンプトで入力し、シェルスクリプト内から呼び出すコマンドを介して、Grid Engine システムを管理することもできます。多くの経験豊富な管理者にとっては、ファイルとスクリプトを使用する方が、設定を変更するより柔軟、迅速、かつ強力な手段です。

ファイルを使用したオブジェクトの追加または変更

ファイル内に作成した指定に従ってオブジェクトを追加するには、次のオプションを付けて qconf コマンドを使用します。


qconf -Ae
qconf -Aq
qconf -Au
qconf -Ackpt
qconf -Ap

ファイル内に作成した指定に従ってオブジェクトを変更するには、次のオプションを付けて qconf コマンドを使用します。


qconf -Me
qconf -Mq
qconf -Mu
qconf -Mckpt
qconf -Mp

–Ae および –Me オプションで、実行ホストの追加または変更を行います。

–Aq および –Mq オプションで、キューの追加または変更を行います。

–Au および –Mu オプションで、ユーザーセットの追加または変更を行います。

–Ackpt および –Mckpt オプションで、チェックポイント設定環境の追加または変更を行います。

–Ap および –Mp オプションで、並列環境の追加または変更を行います。

qconf –s コマンドとこれらのオプションを組み合わせて使用し、既存のオブジェクトを取得し、それを変更します。既存のオブジェクトを更新したり、新しいオブジェクトを作成することができます。


例 8–1 チェックポイント環境の移動コマンドの変更

#!/bin/sh
# ckptmod.sh: modify the migration command
# of a checkpointing environment
# Usage: ckptmod.sh <checkpoint-env-name> <full-path-to-command>
TMPFILE=tmp/ckptmod.$$

CKPT=$1
MIGMETHOD=$2

qconf -sckpt $CKPT | grep -v '^migr_command' > $TMPFILE
echo "migr_command $MIGMETHOD" >> $TMPFILE
qconf -Mckpt $TMPFILE
rm $TMPFILE

ファイルを使用した、キュー、ホスト、および環境の変更

コマンド行から、個別のキュー、ホスト、並列環境、およびチェックポイント設定環境を変更することができます。そのほかのコマンドと組み合わせて qconf コマンドを使用します。

–Me および –me オプションで、実行ホストを変更します。

–Mq および –mq オプションで、キューを変更します。

–Mckpt および –mckpt オプションで、チェックポイント設定環境を変更します。

–Mp および –mp オプションで、並列環境を変更します。

大文字の –M オプションと小文字の –m オプションの違いは、qconf コマンドの結果に影響します。–M と –m は両方とも「modify (変更)」を意味しますが、大文字の –M は既存のファイルからの変更を表すのに対し、小文字の –m は既存のファイルからの変更ではありません。その代わりに、小文字の –m は、エディタで一時ファイルを開きます。このファイルに対して行なった変更を保存し、エディタを終了すると、システムではこれらの変更がただちに反映されます。

ただし、多くのオブジェクトを一度に変更する場合や、対話形式を使用せずにオブジェクト構成を変更する場合は、オブジェクト属性を変更するオプション (–Aattr、–Mattr など) を付けて qconf コマンドを使用します。

次のコマンドは、ファイルでの指定に従って変更を行います。


qconf -Aattr {queue | exechost | pe | ckpt} filename
qconf -Mattr {queue | exechost | pe | ckpt} filename
qconf -Rattr {queue | exechost | pe | ckpt} filename
qconf -Dattr {queue | exechost | pe | ckpt} filename

次のコマンドは、コマンド行での指定に従って変更を行います。


qconf -aattr {queue | exechost | pe | ckpt} attribute value {queue-list | host-list}
qconf -mattr {queue | exechost | pe | ckpt} attribute value {queue-list | host-list}
qconf -rattr {queue | exechost | pe | ckpt} attribute value {queue-list | host-list}
qconf -dattr {queue | exechost | pe | ckpt} attribute value {queue-list | host-list}

–Aattr および –aattr オプションで、属性を追加します。

–Mattr および –mattr オプションで、属性を変更します。

–Rattr および –rattr オプションで、属性を置換します。

–Dattr および –dattr オプションで、属性を削除します。

filename は、属性値のペアが含まれるファイルの名前です。

attribute は、変更するキューまたはホストの属性です。

value は、変更する属性の値です。

–aattr、–mattr、および –dattr オプションを使用すると、値のリストにある個別の値を操作できます。–rattr オプションにより、値のリスト全体が、コマンド行またはファイルで指定した新しいリストに置き換えられます。


例 8–2 キューの型の変更

次のコマンドにより、tcf27–e019.q のキューの型が、バッチのみに変更されます。


% qconf -rattr queue qtype batch tcf27-e019.q


例 8–3 キューの型とシェル起動動作の変更

次のコマンドでは、ファイル new.cfg を使用して、tcf27–e019.q のキューの型とシェル起動動作を変更します。


% cat new.cfg
qtype batch interactive checkpointing
shell_start_mode unix_behavior
% qconf -Rattr queue new.cfg tcf27-e019.q


例 8–4 リソース属性の追加

次のコマンドにより、1000M の値を持つリソース属性 scratch1 と、2 の値を持つリソース属性 long が追加されます。


% qconf -rattr exechost complex_values scratch1=1000M,long=2 tcf27-e019


例 8–5 リソース属性のホストへの関連付け

次のコマンドにより、リソース属性 short が、値 4 を持つホストに関連付けられます。


% qconf -aattr exechost complex_values short=4 tcf27-e019


例 8–6 リソース値の変更

次のコマンドにより、scratch1 の値が 500M に変更されますが、そのほかの値は変更されません。


% qconf -mattr exechost complex_values scratch-=500M tcf27-e019


例 8–7 リソース属性の削除

次のコマンドにより、リソース属性 long が削除されます。


% qconf -dattr exechost complex_values long tcf27-e019


例 8–8 チェックポイント設定環境用のキューのリストへのキューの追加

次のコマンドにより、チェックポイント設定環境 sph 用のキューのリストに、tcf27–b011.q が追加されます。


% qconf -aattr ckpt queue_list tcf27-b011.q sph


例 8–9 並列環境でのスロット数の変更

次のコマンドにより、並列環境 make のスロット数が 50 に変更されます。


% qconf -mattr pe slots 50 make

qselect コマンドを使用したキューインスタンスの対象設定

qselect コマンドにより、キューインスタンスのリストが出力されます。オプションを指定した場合、qselect では、ユーザーが指定した条件に一致するキューインスタンスのみが表示されます。qconf コマンドと qselect を組み合わせて使用すると、変更する特定のキューインスタンスの対象設定を行うことができます。


例 8–10 キューの表示

次のコマンドにより、Linux マシン上のすべてのキューインスタンスが表示されます。


% qselect -l arch=glinux

次のコマンドにより、CPU を 2 つ搭載したマシン上のすべてのキューインスタンスが表示されます。


% qselect -l num_proc=2

次のコマンドにより、CPU を 4 つ搭載した 64 ビットの全 Solaris マシン上のすべてのキューインスタンスが表示されます。


% qselect -l arch=solaris64,num_proc=4

次のコマンドにより、アプリケーションライセンスを提供するキューインスタンスが表示されます。キューインスタンスは、事前に構成されています。


% qselect -l app_lic=TRUE

qselect と qconf を組み合わせることで、1 つのコマンド行を使用して広範囲の変更を行うことができます。このためには、qselect コマンド全体を逆引用符 (` `) 内に入れ、それを qconf コマンド行の queue-list 変数の位置で使用します。


例 8–11 qconf コマンドでの qselect の使用法

次のコマンドにより、Solaris マシン上のすべてのキューインスタンスで、prolog スクリプトが sol_prolog.sh に設定されます。


% qconf -mattr queue prolog /usr/local/scripts/sol_prolog.sh `qselect -l arch=solaris`

次のコマンドにより、2 プロセッサシステム上のすべてのキューインスタンスで、属性 fluent_license が 2 に設定されます。


% qconf -mattr queue complex_values fluent_license=2 `qselect -l num_proc=2`

キューインスタンスの構成を自動化するもっとも柔軟性が高い方法は、qconf コマンドと qselect コマンドを併用する方法です。これらのコマンドを組み合わせることで、独自のカスタム管理スクリプトを構築できます。

ファイルを使用したグローバル構成またはスケジューラの変更

グローバル構成を変更するには、qconf –mconf コマンドを使用します。スケジューラを変更するには、qconf –msconf コマンドを使用します。

これらのコマンドにより、いずれもエディタで一時ファイルが開かれます。エディタを終了すると、この一時ファイルに保存したすべての変更がシステムにより処理され、ただちに変更が有効になります。一時ファイルを開くのに使用されるエディタは、EDITOR 環境変数により指定されたエディタです。 この変数が定義されていない場合、デフォルトでは vi エディタが使用されます。

EDITOR 環境変数を使用すると、qconf コマンドの動作を自動化できます。この変数の値を変更して、最初の引数により名前が指定されているファイルを変更するエディタプログラムを指定します。エディタで一時ファイルを変更し、エディタを終了すると、システムにより変更が読み込まれ、変更はただちに有効になります。


注 –

エディタ操作のあとファイルの変更時間が変更されないと、システムでは誤って、そのファイルが変更されなかったとみなされる場合があります。そのため、変更時間を異なるようにするため、ファイルに書き込む前に sleep 1 命令を挿入する必要があります。


この手法は、あらゆる qconf –m... コマンドに使用できます。特にスケジューラとグローバル構成の管理に便利です。これは、別の方法では手続きを自動化できないためです。


例 8–12 スケジュール間隔の変更

次の例では、スケジューラのスケジュール間隔を変更します。


#!/bin/ksh
# sched_int.sh: modify the schedule interval
# usage: sched_int.sh <n>, where <n> is
# the new interval, in seconds. n < 60

TMPFILE=/tmp/sched_int.$$
if [ $MOD_SGE_SCHED_INT ]; then
     grep -v schedule_interval $1 > $TMPFILE
     echo "schedule_interval 0:0:$MOD_SGE_SCHED_INT" >> $TMPFILE
# sleep to ensure modification time changes
     sleep 1
     mv $TMPFILE $1
else
     export EDITOR=$0
     export MOD_SGE_SCHED_INT=$1
     qconf -msconf
fi

このスクリプトは、自分自身を指定するよう EDITOR 環境を変更します。続いてスクリプトは qconf –msconf コマンドを呼び出します。この 2 番目のスクリプトの入れ子呼び出しは、最初の引数により指定された一時ファイルを変更してから終了します。Grid Engine システムにより自動的に変更が読み込まれ、スクリプトの最初の呼び出しが終了します。