ホーム > サポート > FAQ(よくある質問) > 複数グループを使い分けるには?

複数グループを使い分けるには

最終更新日:2021年11月12日
一つのアカウントで複数の課題(グループ)に参加している場合、課題(グループ)毎に投入可能なリソースグループが異なります。
また、ディスク使用量の制限も課題(グループ)毎に設定されます。

これらの設定には、Linuxのユーザグループを使っています。
そのため、状況に応じてユーザグループを切り替えながら利用して頂く必要があります。

ユーザグループの切り替えに関する主な操作は以下の通りです。

  1. ユーザグループの一覧表示

    以下により、このアカウントで選択可能なユーザグループをすべて表示します。
     $ groups
  2. 現在選択しているユーザグループの表示

    以下により、現在のアカウントの状態を表示します。現在選択されているユーザグループは gidの括弧内に表示されます。
     $ id
    例えば以下の表示では、gr123456 が現在選択されているユーザグループです。
    uid=10000(k12345a) gid=54321(gr123456) groups=54321(gr123456),10000(k12345a),11111(gr654321)
  3. 別のユーザグループで利用できるリソースグループへのジョブ投入

    例えば gr654321 というユーザグループでジョブを投入したい場合、 まず、以下のように newgrpでユーザグループを変更します。
     $ newgrp - gr654321
    このコマンドで、別のユーザグループとして新たにログインした状態となり、カレントディレクトリもホームに戻ります。
    その後、例えばジョブスクリプトのあるディレクトリに移動し、pjsubコマンドを使用すると、 gr654321 に許可されたリソースグループにジョブを投入できます。
    ちなみに、もし、そのユーザグループに許可されていないリソースグループへのジョブ投入をしようとすると、 以下のメッセージが表示されます。
    [ERR.] PJM 0070 pjsub No execute: pjsub.
    なお、この方法では、newgrp以降の全てのコマンドが新しいユーザグループとして実行されるので、 新規に作成するファイルやディレクトリにも、そのユーザグループが設定されます。
    一方 pjsubコマンドのみを gr654321 というユーザグループで実行するには、以下のように sgコマンドを使用します。
     $ sg gr654321 'pjsub test.sh'
    (実行するコマンドは必ず ' (シングルクォート)で囲んでください。)

  4. 現在のディスク使用量や制限値の確認

    例えばユーザグループ gr123456のディスク使用量や制限値は以下で表示できます。
     $ lfs quota -g gr123456 /home
    表示される内容のうち kbytes が現在の使用量(KB)で、その右の数値が制限値(KB)です。

  5. ファイルの所属ユーザグループの変更

    例えばファイル test.data の所属ユーザグループを gr654321 に変更するには、以下のように chgrpコマンドを使用します。
     $ chgrp gr654321 test.data
    ファイルの所属ユーザグループを変更すると、ディスク使用量も新しいユーザグループの方に移ります。

    ファイル名に * 等を使って複数のファイルの所属ユーザグループを同時に変更したり、オプションに -Rを付けてディレクトリ全体の所属ユーザグループを変更したりすることが出来ます。

  6. ジョブスクリプト中での出力ファイルのユーザグループ指定

    例えば、ユーザグループ gr654321でしか利用できないリソースグループにジョブを投入し、 ジョブ内で作成されるファイルの所属ユーザグループは gr123456にしたい、という場合、 まずジョブスクリプト中の各実行コマンドを、以下のような形で sgコマンドから実行するようにします。
    sg gr123456 'mpiexec.hydra -n 16 ./main >& result.txt'
    (この例では、標準出力や標準エラー出力もユーザグループ gr123456に所属させるため、result.txtというファイルにリダイレクトしています。)

    その後、そのジョブスクリプトの投入をユーザグループ gr654321 で実行します。 例えば sgコマンドを用いて、ジョブスクリプト test.sh を投入する場合は、以下のようにします。
     $ sg gr654321 test.sh
  7. こうすることで、ジョブを投入するユーザグループと、結果のファイルを保存するユーザグループを別々に指定できます。