意図せず、job_stateが"H" になった場合のジョブのリリース方法


当文書では以下の4台で環境を構成している例を用いて説明します。


pbs-head: 管理サーバ    pbs_server,pbs_sched,pbs_commの各デーモンが稼働
node01:    計算ノード    pbs_momデーモンが稼働
node02:    計算ノード    pbs_momデーモンが稼働
front-end: コマンド実行専用サーバ PBSコマンドのみをインストール

* 各サーバのホスト名とIPの紐づけは以下の通りです。

192.168.57.132    pbs-head
192.168.57.133    node01
192.168.57.137    node02
192.168.57.138    front-end


 

1. 意図せずジョブがjob_stateが"H"なるジョブについて

PBSは、ジョブの実行を試行できる回数制限が設定されています。
この結果、試行回数が21を超えるとそのジョブはPBSシステムによってholdされます。
この試行回数は"run_count"ジョブ属性に記録されるので、qstatコマンドでその回数を確認できます。
それにより、該当ジョブがシステムによってholdされたか否かを確認することができます。


PBSシステムによってholdされたジョブは以下コマンドでリリースする必要があります。


qrls -h s <jobid>


2. 回数制限を超え、PBSシステムによってholdになったジョブを例示します。


2.1. qsubしたユーザが存在しない計算ノードでジョブを実行しシステムholdを発生させる。


* node01にuser04は存在しません。

[root@node01 ~]# id user04
id: user04: no such user

* front-end上でuser04としてnode01を指定してジョブを実行し試行回数制限を意図的に超えさせます。

[user04@front-end ~]$ id user04
uid=1003(user04) gid=1003(user04) groups=1003(user04)
[user04@front-end ~]$ cat test.sh
#!/bin/sh

sleep 10
echo "Hello PBS!"
[user04@front-end ~]$ qsub -lvnode=node01 test.sh   <-- ここでnode01を指定しています。
113.pbs-head
[user04@front-end ~]$ qstat -s

pbs-head:
                                                            Req'd  Req'd   Elap
Job ID          Username Queue    Jobname    SessID NDS TSK Memory Time  S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
113.pbs-head    user04   workq    test.sh       --    1   1    --    --  R   --
   Job was sent for execution at Tue Sep 12 at 16:02 on (node01:ncpus=1)
[user04@front-end ~]$ qstat -s    <-- このタイミングで"H"になりました。 
pbs-head:
                                                            Req'd  Req'd   Elap
Job ID          Username Queue    Jobname    SessID NDS TSK Memory Time  S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
113.pbs-head    user04   workq    test.sh       --    1   1    --    --  H   --
   job held, too many failed attempts to run
[user04@front-end ~]$

* job_stateが"H"になった後、qstat -fx <jobid>でrun_countの数を確認します。
 以下のようにrun_count = 21なので試行回数越えのシステムholdであることが分かります。

[user04@front-end ~]$ qstat -fx 113 | grep run
    Rerunable = True
    comment = job held, too many failed attempts to run
    run_count = 21
[user04@front-end ~]$


2-2. node01に"user04"を作成して問題を解消します。

[root@node01 ~]# useradd user04
[root@node01 ~]# passwd user04    <-- passwordはfrontendのuser04と同じものにします。
ユーザー user04 のパスワードを変更。
新しいパスワード:
よくないパスワード: このパスワードは辞書チェックに失敗しました。 - 辞書の単語に基づいています
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
[root@node01 ~]#

 


2-3. qrlsでジョブを再実行します。

* qrls -h s オプションを実行するには、Manager、administrator権限、またはrootである必要があります。
* rootユーザはpbsサーバ(この例の環境ではpbs-head)のみmanager権限を持ちます。
 以下のようにpbsサーバ以外のサーバでmanager権限が必要なコマンドを実行するには、以下のように明示的に
 manager権限を与える必要が有る場合があります。

 # qmgr -c 's s managers = root@front-end'

* 以下、qrls -h s <jobid>を実行してジョブをリリースした例です。

[root@front-end ~]# qstat -s

pbs-head:
                                                            Req'd  Req'd   Elap
Job ID          Username Queue    Jobname    SessID NDS TSK Memory Time  S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
113.pbs-head    user04   workq    test.sh       --    1   1    --    --  H   --
   job held, too many failed attempts to run
[root@front-end ~]# qrls -h s 113
[root@front-end ~]# qstat -s

pbs-head:
                                                            Req'd  Req'd   Elap
Job ID          Username Queue    Jobname    SessID NDS TSK Memory Time  S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
113.pbs-head    user04   workq    test.sh       --    1   1    --    --  R   --
   Job run at Tue Sep 12 at 16:35 on (node01:ncpus=1)
[root@front-end ~]#