意図せず、job_stateが"H" になった場合のジョブのリリース方法
Shiratori Altair
Altair Employee
当文書では以下の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 ~]#
0