GNU/Linux >> Linux Esercitazione >  >> Linux

qstat e nomi di lavoro lunghi

Questo è un po' disordinato, ma funziona come una soluzione semplice da avere nella cronologia dei comandi. Tutti gli strumenti standard. L'output è praticamente lo stesso di quello che ottieni da una normale chiamata qstat, ma non otterrai le intestazioni:

Una riga:

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

Descrizione dei comandi:

Elenca lavori come XML:

qstat -xml

Rimuovi tutte le nuove righe:

tr '\n' ' '

Aggiungi una nuova riga prima di ogni voce di lavoro nell'elenco:

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

Rimuovi tutto il materiale XML:

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

Hack per aggiungere una nuova riga alla fine:

grep " "

Colonna:

column -t

Esempio di output

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

Forse una soluzione più semplice:imposta SGE_LONG_JOB_NAMES su -1 e qstat calcolerà la dimensione della colonna del nome:

export SGE_LONG_JOB_NAMES=-1
qstat -u username

Funziona per me.

Saluti!


Attualmente sto scrivendo il mio qstat wrapper per ottenere un output pulito, utile e personalizzabile.

Ecco il repository github. Il progetto è cresciuto troppo perché il codice possa essere incollato in questo messaggio.

Viene fornito con un programma di installazione e dovrebbe funzionare senza problemi sia con Python 2.7 che con 3 (lo script di installazione apporta le modifiche se necessario). qjobs -h fornisce un aiuto sulle opzioni disponibili. Scriverò una documentazione più completa nei prossimi giorni sul wiki di github.

Aggiornerò questo messaggio il più spesso possibile per attenermi allo stato attuale del progetto. Non esitare a commentare qui (o su github) per richiedere funzionalità/segnalare problemi.

Nel prossimo futuro, cercherò di aggiungere una modalità completamente interattiva per sfogliare più facilmente l'elenco dei lavori. Naturalmente, il classico output di testo sarà ancora disponibile (potrebbe essere utile inviare l'output via e-mail o per un rapido controllo dei lavori in sospeso/in esecuzione).

Esempio di output

Comando qjobs dà:

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

Comando qjobs -o dà:

tot: 7

r: 2   qw: 5

Comando qjobs -o inek -t dà (e è il tempo trascorso dall'ora di inizio/sub, il formato è personalizzabile utilizzando le specifiche del formato. Mini-linguaggio di Python; k è il nome completo della coda, con il dominio):

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 fornisce un elenco completo degli "articoli" disponibili. Ognuno di questi articoli è disponibile come:

  • un output di colonna (con -o ITEMS );
  • come criterio per contare il lavoro e produrre l'output totale, con -t (ad es. -t s contare per stato come nei primi due esempi);
  • come criterio per ordinare il lavoro con -s , il valore predefinito è -s ips ciò significa che l'elenco dei lavori viene ordinato per ID, quindi per priorità e infine per stato prima di essere stampato.

Il risultato di 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

Questo script funziona abbastanza bene. Sembra che provenga da Cambridge. http://www.hep.ph.ic.ac.uk/~dbauer/grid/myqstat.py

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

Per 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. Comprendere i comandi di controllo del lavoro in Linux:bg, fg e CTRL+Z

  2. Quali caratteri sono vietati nei nomi delle directory di Windows e Linux?

  3. PubkeyAcceptedKeyTypes e tipo di chiave ssh-dsa

  4. AWK e nomi di file con spazio al suo interno.

  5. sintassi di ls --hide=e ls --ignore=

Gogo:crea collegamenti a percorsi lunghi e complicati in Linux

I migliori terminali Linux online e gli editor Bash online

Crea ed elimina un lavoro Cron

Differenza tra virgolette singole e doppie in Bash Shell

Ottieni nomi e indirizzi delle funzioni esportate in Linux

Nomi per dischi ATA e SATA in Linux