GNU/Linux >> Linux の 問題 >  >> Linux

qstat と長いジョブ名

これは少し厄介ですが、コマンド履歴にある簡単な解決策として機能します。すべての標準ツール。出力は、通常の 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)

Linux
  1. Linux のジョブ制御コマンドを理解する – bg、fg、および CTRL+Z

  2. Windows および Linux のディレクトリ名で禁止されている文字は何ですか?

  3. Linux でエクスポートされた関数の名前とアドレスを取得する

  1. Linuxですべてのファイルとディレクトリ名を小文字に変更

  2. Linux での ATA および SATA ディスクの名前

  3. ls --hide=および ls --ignore=の構文

  1. Cプログラミングチュートリアル4-変数とメモリ

  2. MemとVmemについて?

  3. Bashで文字列を数値として評価する方法