これは少し厄介ですが、コマンド履歴にある簡単な解決策として機能します。すべての標準ツール。出力は、通常の qstat 呼び出しから得られるものとほとんど同じですが、ヘッダーは得られません:
ワンライナー:
qstat -xml | tr '\n' ' ' | sed 's#<job_list[^>]*>#\n#g' \
| sed 's#<[^>]*>##g' | grep " " | column -t
コマンドの説明:
ジョブを XML としてリストする:
qstat -xml
すべての改行を削除:
tr '\n' ' '
リスト内の各ジョブ エントリの前に改行を追加します:
sed 's#<job_list[^>]*>#\n#g'
すべての XML を削除:
sed 's#<[^>]*>##g'
最後に改行を追加するハック:
grep " "
列に並べる:
column -t
出力例
351996 0.50502 ProjectA_XXXXXXXXX_XXXX_XXXXXX user123 r 2015-06-25T15:38:41 [email protected] 1
351997 0.50502 ProjectA_XXX_XXXX_XXX user123 r 2015-06-25T15:39:26 [email protected] 1
351998 0.50502 ProjectA_XXXXXXXXXXXXX_XXXX_XXXX user123 r 2015-06-25T15:40:26 [email protected] 1
351999 0.50502 ProjectA_XXXXXXXXXXXXXXXXX_XXXX_XXXX user123 r 2015-06-25T15:42:11 [email protected] 1
352001 0.50502 ProjectA_XXXXXXXXXXXXXXXXXXXXXXX_XXXX_XXXX user123 r 2015-06-25T15:42:11 [email protected] 1
352008 0.50501 runXXXX69 usr1 r 2015-06-25T15:49:04 [email protected] 1
352009 0.50501 runXXXX70 usr1 r 2015-06-25T15:49:04 [email protected] 1
352010 0.50501 runXXXX71 usr1 r 2015-06-25T15:49:04 [email protected] 1
352011 0.50501 runXXXX72 usr1 r 2015-06-25T15:49:04 [email protected] 1
352012 0.50501 runXXXX73 usr1 r 2015-06-25T15:49:04 [email protected] 1
352013 0.50501 runXXXX74 usr1 r 2015-06-25T15:49:04 [email protected] 1
おそらくもっと簡単な解決策:SGE_LONG_JOB_NAMES を -1 に設定すると、qstat が名前列のサイズを計算します:
export SGE_LONG_JOB_NAMES=-1
qstat -u username
乾杯!
私は現在、独自の qstat
を書いています。 クリーンで便利なカスタマイズ可能な出力を取得するためのラッパー。
ここに github リポジトリがあります。プロジェクトが大きくなりすぎて、このメッセージにコードを貼り付けることができなくなりました.
インストーラーが付属しており、Python 2.7 と 3 の両方で問題なく動作するはずです (必要に応じて、インストール スクリプトが変更を加えます)。 qjobs -h
利用可能なオプションに関するヘルプを提供します。近いうちに、より完全なドキュメントを github wiki に書きます。
プロジェクトの現在の状態に固執するために、このメッセージをできるだけ頻繁に更新します。ここ (または github) にコメントして、機能や問題を報告してください。
近い将来、完全にインタラクティブなモードを追加して、ジョブ リストをより簡単に閲覧できるようにする予定です。もちろん、従来のテキスト出力は引き続き利用できます (出力を電子メールで送信したり、保留中/実行中のジョブをすばやく確認したりするのに役立つ場合があります)。
出力例
コマンド qjobs
与えます:
5599109 short_name r 2015-06-25 10:27:39 queue1
5599110 jobName r 2015-06-25 10:35:39 queue2
5599111 a_long_job_name qw 2015-06-25 10:40:39
5599112 foo qw 2015-06-25 10:40:39
5599113 bar qw 2015-06-25 10:40:39
5599114 baz qw 2015-06-25 10:40:39
5599115 beer qw 2015-06-25 10:40:39
tot: 7
r: 2 qw: 5
コマンド qjobs -o
与えます:
tot: 7
r: 2 qw: 5
コマンド qjobs -o inek -t
与えます (e
は開始/サブ時間からの経過時間であり、フォーマットはフォーマット仕様を使用してカスタマイズ可能です。 Python のミニ言語。 k
ドメインを含む完全なキュー名です):
5598985 SpongeBob 522:02 (21.75 days) [email protected]
5598987 ping_java 521:47 (21.74 days) [email protected]
5598988 run3.14 521:46 (21.74 days) [email protected]
5598990 strange_job_42 521:42 (21.74 days) [email protected]
5598991 coffee-maker 521:39 (21.74 days) [email protected]
5598992 dumbtask 521:29 (21.73 days) [email protected]
qjobs -i
利用可能な「アイテム」の完全なリストを提供します。このアイテムはそれぞれ次のように入手できます:
- 列出力 (
-o ITEMS
を使用) ); - ジョブをカウントして総出力を生成する基準として、
-t
(例:-t s
最初の 2 つの例のように州ごとにカウントします); -s
でジョブをソートする基準として 、デフォルトは-s ips
です つまり、ジョブ リストは ID でソートされ、次に優先度でソートされ、最後に印刷前の状態でソートされます。
qjobs -i
の結果 です:
i: job id
p: job priority
n: job name
o: job owner
s: job state
t: job start/submission time
e: elapsed time since start/submission
q: queue name without domain
d: queue domain
k: queue name with domain
r: requested queue(s)
l: number of slots used
このスクリプトはかなりうまく機能します。ケンブリッジ出身らしい。 http://www.hep.ph.ic.ac.uk/~dbauer/grid/myqstat.py
Python 3 の場合:
#!/usr/bin/python
import xml.dom.minidom
import os
import sys
import string
f=os.popen('qstat -u \* -xml -r')
dom=xml.dom.minidom.parse(f)
jobs=dom.getElementsByTagName('job_info')
run=jobs[0]
runjobs=run.getElementsByTagName('job_list')
def fakeqstat(joblist):
for r in joblist:
try:
jobname=r.getElementsByTagName('JB_name')[0].childNodes[0].data
jobown=r.getElementsByTagName('JB_owner')[0].childNodes[0].data
jobstate=r.getElementsByTagName('state')[0].childNodes[0].data
jobnum=r.getElementsByTagName('JB_job_number')[0].childNodes[0].data
jobtime='not set'
if(jobstate=='r'):
jobtime=r.getElementsByTagName('JAT_start_time')[0].childNodes[0].data
elif(jobstate=='dt'):
jobtime=r.getElementsByTagName('JAT_start_time')[0].childNodes[0].data
else:
jobtime=r.getElementsByTagName('JB_submission_time')[0].childNodes[0].data
print(jobnum, '\t', jobown.ljust(16), '\t', jobname.ljust(16),'\t', jobstate,'\t',jobtime)
except Exception as e:
print(e)
fakeqstat(runjobs)
Python 2 の場合:
#!/usr/bin/python
import xml.dom.minidom
import os
import sys
import string
#import re
f=os.popen('qstat -u \* -xml -r')
dom=xml.dom.minidom.parse(f)
jobs=dom.getElementsByTagName('job_info')
run=jobs[0]
runjobs=run.getElementsByTagName('job_list')
def fakeqstat(joblist):
for r in joblist:
jobname=r.getElementsByTagName('JB_name')[0].childNodes[0].data
jobown=r.getElementsByTagName('JB_owner')[0].childNodes[0].data
jobstate=r.getElementsByTagName('state')[0].childNodes[0].data
jobnum=r.getElementsByTagName('JB_job_number')[0].childNodes[0].data
jobtime='not set'
if(jobstate=='r'):
jobtime=r.getElementsByTagName('JAT_start_time')[0].childNodes[0].data
elif(jobstate=='dt'):
jobtime=r.getElementsByTagName('JAT_start_time')[0].childNodes[0].data
else:
jobtime=r.getElementsByTagName('JB_submission_time')[0].childNodes[0].data
print jobnum, '\t', jobown.ljust(16), '\t', jobname.ljust(16),'\t', jobstate,'\t',jobtime
fakeqstat(runjobs)