この章では、ファイルやスクリプトを使用して、キュー、ホスト、および環境などの Grid Engine システムのオブジェクトを追加または変更する方法について説明します。
この章で説明する内容は、次のとおりです。
Grid Engine システムには、2 種類のレポートとアカウンティングの機能が用意されています。
アカウンティングおよびレポートコンソール (ARCo)
qacct コマンドおよび accounting ファイル
オプションのアカウンティングおよびレポートコンソール (ARCo) を使用すると、Grid Engine システムから実際のアカウンティングとレポートのデータを収集し、標準的な SQL データベースであるレポートデータベースにデータを格納できます。ARCo は、次の SQL データベースシステムをサポートしています。
PostgreSQL
Oracle
MySQL
また 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 プログラムは、次のタスクを実行します。
レポートファイルから raw データを読み取り、この raw データをレポートデータベースに書き込む。
派生値を計算する。ユーザーは、計算を制御する規則だけでなく、どの値を計算するかを構成できます。
期限切れのデータを削除する。ユーザーは、データを保持する期間を構成できます。
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」フィールドでは次のパラメータを設定します。
accounting を true に設定します。true がデフォルト値です。
reporting を true に設定します。
flush_time を 00:00:15 に設定します。00:00:15 がデフォルト値です。
joblog を true に設定します。
sharelog を 00:00:00 に設定します。00:00:00 がデフォルト値です。
コマンド行からレポートファイルを使用可能にするには、上記の説明のように、qconf –mconf コマンドを使用して reporting_params 属性を設定します。
レポートファイルが使用可能になれば、dbwriter はレポートファイルから raw データを読み取り、それをレポートデータベースに書き込むことができるようになります。
レポートファイルの構成の詳細については、 reporting(5) のマニュアルページを参照してください。ARCo のインストールと設定の詳細については、『Sun N1 Grid Engine 6.1 インストールガイド』の第 8 章「アカウンティングおよびレポートコンソールのインストール」を参照してください。
派生値を計算するための規則は、DbWriterConfig タグのサブタグである派生タグで指定します。次の表に、派生タグの属性を示します。
説明
データを集計する対象のオブジェクト。オブジェクトは次のいずれかです。
ホスト
キュー
プロジェクト
部署
ユーザー
グループ
派生値を計算する頻度を指定する時間範囲です。時間範囲は次のいずれかです。
hour
day
month
year
計算済みのデータを保持する変数の名前です。
次の表に、派生タグのサブ要素を示します。
派生値を計算する 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 から構成された複合的な主キーを持ちます。
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 テンプレートパラメータには次のものがあります。
説明
派生値を計算するための集計関数です。XML ファイルの auto タグの関数属性に由来します。
派生値のオブジェクトに依存します。
派生値のオブジェクトに依存します。
派生値のオブジェクトに依存します。
派生タグの内部属性に由来します。
値が格納されるデータベーステーブルの名前です。オブジェクトに依存します (host => host_values, user => user_values, . )。
値テーブルを親テーブルに結合するのに必要な主キーです。オブジェクトに依存します。
親の ID を保持するフィールドの名前です。オブジェクトに依存します。
親データベーステーブルの名前です。オブジェクトに依存します (host => host, user => user)。
親テーブル用のフィルタです。親テーブルの各エントリの派生値が計算されます (例: 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 |
レポートデータベースで期限切れレコードを削除するには、削除タグで削除規則を指定する必要があります。次の表に、削除タグの属性を示します。
説明
削除するデータの型です。有効なエントリには次のものがあります。
job
job_log
share_log
host_values
queue_values
project_values
department_values
user_values
group_values
time_amount の単位です。
レコードを保持する単位 (time_range) の数です。
次の表に、削除タブのサブ要素を示します。
一部のスコープに関しては、サブスコープを構成できます。サブスコープは、削除の追加条件を指定します。サブスコープは、すべての *_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 により、完了したすべてのジョブによって生成され、クラスタアカウンティングファイル sge-root/cell/common/accounting に含まれている、クラスタのすべてのマシンに関する使用率集計情報が表示されます。この場合、qacct は秒単位で次の 3 つの時間を報告します。
キューあるいはユーザーなどに関するアカウンティング情報の報告に、いくつかのオプションを使用可能です。特に、qacct -l コマンドを使用すると、すでに完了していて、リソース要求指定に一致するすべてのジョブに関する情報を要求できます。
qacct -j [job-id | job-name] コマンドを使用すると、Grid Engine システムによって格納された、リソース使用率情報の全体に直接アクセスできます。 この情報には、getrusage システムコールにより提供された情報が含まれています。
-j オプションは、job-id または job-name を持つジョブのリソース使用率エントリを報告します。引数なしで実行された場合は、参照されたアカウンティングファイルに含まれるすべてのジョブが表示されます。ジョブ ID が指定され、複数のエントリが表示された場合は、次のいずれかが真になります。
ジョブ ID 番号が折り返される。ジョブ ID の範囲は 1 から 999999 です。
移動したチェックポイント設定ジョブが表示される。
詳細については、qacct(1) のマニュアルページを参照してください。
Grid Engine システムの構成ファイルを自動的にバックアップすることができます。自動バックアッププロセスでは、backup_template.conf という名前の構成ファイルを使用します。デフォルトでは、バックアップ構成ファイルの位置は sge-root/util/install_modules/backup_template.conf です。
バックアップ構成ファイルでは、次の要素を定義する必要があります。
Grid Engine システムのルートディレクトリ。
Grid Engine システムのセルディレクトリ。
Grid Engine システムのバックアップディレクトリ。
バックアップの種類。Grid Engine システムの構成ファイルを単にバックアップするだけでなく、バックアップを、構成ファイルが含まれる圧縮 tar ファイルにすることもできます。
バックアップファイルのファイル名。
バックアップテンプレートファイルは、次の例のようになります。
################################################## # 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 番号です。
次のコマンドを入力して、手動バックアップを開始します。
inst_sge -bup |
<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] |
<sge-cell> 名を入力するか、デフォルトをそのまま使用します。
Please enter your SGE_CELL name. Default: [default] |
バックアップの作成先のディレクトリを入力するか、デフォルトをそのまま使用します。
Where do you want to save the backupfiles? Default: [/home/user/ts/u10/backup] |
圧縮形式の tar バックアップファイルを作成するかどうかを選択します。
使用している tar のバージョン (gnu tar/ solaris tar) が異なると、このオプションで問題が起きることがあります。場合によっては、tar パッケージが壊れていることがあります。圧縮および圧縮解除を問題なく行うには、同じ tar バイナリを使用してください。
Shall the backup function create a compressed tarpackage with your files? (y/n) [y] >> |
バックアップファイルの名前を入力します。デフォルトが示されます。
... starting with backup Please enter a filename for your backupfile. Default: [backup.tar] >> |
バックアップが実行され、その情報が表示されます。
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]] |
復元作業を開始する前に qmaster デーモンを停止してください。復元中にスプーリングデータベースが変更され、復元機能と qmaster が同じデータにアクセスしようとしていると、データが失われることがあります。
次のコマンドを入力して、復元作業を開始します。
inst_sge -rst |
画面のメッセージを読んで、対応します。
SGE Configuration Restore ------------------------- This feature restores the configuration from a backup you made previously. Hit, <ENTER> to continue! |
<sge-root> ディレクトリを入力するか、デフォルトをそのまま使用します。
Please enter your SGE_ROOT directory. Default: [/home/user/ts/u10] |
<sge-cell> 名を入力するか、デフォルトをそのまま使用します。
Please enter your SGE_CELL name. Default: [default] |
バックアップファイルの形式を確認します。
バックアップファイルが、圧縮形式の tar ファイルでないことがあります。
Is your backupfile in tar.gz[Z] format? (y/n) [y] |
バックアップファイルへのフルパスを入力します。
Please enter the full path and name of your backup file. Default: [/home/user/ts/u10/backup/backup.tar.gz] |
スプーリングデータベースの情報を確認します。
復元機能はバックアップファイルを圧縮解除し、システム情報を読み取ります。データが失われないようにするには、適切なスプーリングデータベースが検出されていることを確認します。
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. >> |
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 コマンドとこれらのオプションを組み合わせて使用し、既存のオブジェクトを取得し、それを変更します。既存のオブジェクトを更新したり、新しいオブジェクトを作成することができます。
#!/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 コマンドを使用します。
すでにファイルを用意している場合は、次のように適切なオプションを付けて qconf コマンドを入力します。
qconf -Me qconf -Mq qconf -Mckpt qconf -Mp |
ファイルを用意していない場合は、次のように適切なオプションを付けて qconf コマンドを入力します。
qconf -me qconf -mq qconf -mckpt qconf -mp |
–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 オプションにより、値のリスト全体が、コマンド行またはファイルで指定した新しいリストに置き換えられます。
次のコマンドにより、tcf27–e019.q のキューの型が、バッチのみに変更されます。
% qconf -rattr queue qtype batch tcf27-e019.q |
次のコマンドでは、ファイル 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 |
次のコマンドにより、1000M の値を持つリソース属性 scratch1 と、2 の値を持つリソース属性 long が追加されます。
% qconf -rattr exechost complex_values scratch1=1000M,long=2 tcf27-e019 |
次のコマンドにより、リソース属性 short が、値 4 を持つホストに関連付けられます。
% qconf -aattr exechost complex_values short=4 tcf27-e019 |
次のコマンドにより、scratch1 の値が 500M に変更されますが、そのほかの値は変更されません。
% qconf -mattr exechost complex_values scratch-=500M tcf27-e019 |
次のコマンドにより、リソース属性 long が削除されます。
% qconf -dattr exechost complex_values long tcf27-e019 |
次のコマンドにより、チェックポイント設定環境 sph 用のキューのリストに、tcf27–b011.q が追加されます。
% qconf -aattr ckpt queue_list tcf27-b011.q sph |
次のコマンドにより、並列環境 make のスロット数が 50 に変更されます。
% qconf -mattr pe slots 50 make |
qselect コマンドにより、キューインスタンスのリストが出力されます。オプションを指定した場合、qselect では、ユーザーが指定した条件に一致するキューインスタンスのみが表示されます。qconf コマンドと qselect を組み合わせて使用すると、変更する特定のキューインスタンスの対象設定を行うことができます。
次のコマンドにより、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 変数の位置で使用します。
次のコマンドにより、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... コマンドに使用できます。特にスケジューラとグローバル構成の管理に便利です。これは、別の方法では手続きを自動化できないためです。
次の例では、スケジューラのスケジュール間隔を変更します。
#!/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 システムにより自動的に変更が読み込まれ、スクリプトの最初の呼び出しが終了します。