GNU/Linux >> Znalost Linux >  >> Linux

qstat a dlouhé názvy úloh

Toto je trochu chaotické, ale funguje to jako jednoduché řešení v historii příkazů. Všechny standardní nástroje. Výstup je v podstatě stejný jako to, co získáte z normálního volání qstat, ale nedostanete záhlaví:

Jedna vložka:

qstat -xml | tr '\n' ' ' | sed 's#<job_list[^>]*>#\n#g' \
  | sed 's#<[^>]*>##g' | grep " " | column -t

Popis příkazů:

Seznam úloh jako XML:

qstat -xml

Odebrat všechny nové řádky:

tr '\n' ' '

Přidat nový řádek před každou položku úlohy v seznamu:

sed 's#<job_list[^>]*>#\n#g'

Odebrat všechny položky XML:

sed 's#<[^>]*>##g'

Hackujte pro přidání nového řádku na konec:

grep " "

Seřadit:

column -t

Ukázkový výstup

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

Možná jednodušší řešení:nastavte SGE_LONG_JOB_NAMES na -1 a qstat zjistí velikost sloupce názvu:

export SGE_LONG_JOB_NAMES=-1
qstat -u username

Funguje pro mě.

Na zdraví!


Momentálně píšu svůj vlastní qstat wrapper, abyste získali čistý, užitečný a přizpůsobitelný výstup.

Zde je úložiště github. Projekt se příliš rozrostl na to, aby bylo možné kód vložit do této zprávy.

Dodává se s instalačním programem a měl by bez problémů fungovat jak s Pythonem 2.7, tak s 3 (instalační skript provede úpravy v případě potřeby). qjobs -h poskytuje určitou nápovědu k dostupným možnostem. V následujících dnech napíšu úplnější dokumentaci na wiki github.

Tuto zprávu budu aktualizovat co nejčastěji, abych se držel aktuálního stavu projektu. Neváhejte se vyjádřit zde (nebo na githubu) a zeptat se na funkce/nahlásit problémy.

V blízké budoucnosti se pokusím přidat plně interaktivní režim pro snazší procházení seznamu úloh. Klasický textový výstup bude samozřejmě stále k dispozici (může být užitečné poslat výstup e-mailem nebo pro rychlou kontrolu čekajících/běžících úloh).

Ukázkový výstup

Příkaz qjobs dává:

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

Příkaz qjobs -o dává:

tot: 7

r: 2   qw: 5

Příkaz qjobs -o inek -t dává (e je čas, který uplynul od počátečního/dílčího času, formát lze přizpůsobit pomocí Specifikace formátu. Mini-jazyk Pythonu; k je úplný název fronty s doménou):

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 poskytuje úplný seznam dostupných „položek“. Každá z těchto položek je dostupná jako:

  • výstup sloupce (s -o ITEMS );
  • jako kritérium pro počítání úlohy a vytvoření celkového výstupu s -t (např. -t s počítat podle stavu jako v prvních dvou příkladech);
  • jako kritérium pro řazení úlohy pomocí -s , výchozí je -s ips což znamená, že seznam úloh je před vytištěním seřazen podle ID, poté podle priority a nakonec podle stavu.

Výsledek qjobs -i je:

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

Tento skript funguje docela dobře. Vypadá to jako z cambridge. http://www.hep.ph.ic.ac.uk/~dbauer/grid/myqstat.py

Pro 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)

Pro 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. Čtete a prohledáváte dlouhé mužské stránky?

  2. O Mem a Vmem?

  3. Názvy uživatelů a hostitelů ve veřejném klíči na Ssh-copy-id?

  1. Přejmenujte všechny soubory a názvy adresářů na malá písmena v Linuxu

  2. C Výukový program programování 4 - Proměnné a paměť

  3. Jak vyhodnotit řetězce jako čísla v Bash

  1. Pochopení příkazů řízení úloh v Linuxu – bg, fg a CTRL+Z

  2. Typ klíče PubkeyAcceptedKeyTypes a ssh-dsa

  3. AWK a názvy souborů s mezerou.