GNU/Linux >> LINUX-Kenntnisse >  >> Linux

qstat und lange Jobnamen

Dies ist ein bisschen chaotisch, aber es funktioniert als einfache Lösung im Befehlsverlauf. Alle gängigen Werkzeuge. Die Ausgabe ist so ziemlich die gleiche wie bei einem normalen qstat-Aufruf, aber Sie erhalten keine Header:

Einzeiler:

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

Beschreibung der Befehle:

Jobs als XML auflisten:

qstat -xml

Alle Zeilenumbrüche entfernen:

tr '\n' ' '

Fügen Sie vor jedem Job-Eintrag in der Liste einen Zeilenumbruch hinzu:

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

Alles XML-Zeug entfernen:

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

Hack zum Hinzufügen einer neuen Zeile am Ende:

grep " "

Spalten:

column -t

Beispielausgabe

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

Vielleicht eine einfachere Lösung:Setzen Sie SGE_LONG_JOB_NAMES auf -1, und qstat ermittelt die Größe der Namensspalte:

export SGE_LONG_JOB_NAMES=-1
qstat -u username

Funktioniert bei mir.

Prost!


Ich schreibe gerade mein eigenes qstat Wrapper, um eine saubere, nützliche und anpassbare Ausgabe zu erhalten.

Hier ist das Github-Repository. Das Projekt ist zu stark gewachsen, als dass der Code in diese Nachricht eingefügt werden könnte.

Es wird mit einem Installationsprogramm geliefert und sollte problemlos mit Python 2.7 und 3 funktionieren (das Installationsskript nimmt die Änderungen bei Bedarf vor). qjobs -h bietet Hilfestellung zu den verfügbaren Optionen. Ich werde in den nächsten Tagen eine vollständigere Dokumentation im Github-Wiki schreiben.

Ich werde diese Nachricht so oft wie möglich aktualisieren, um am aktuellen Stand des Projekts festzuhalten. Bitte zögern Sie nicht, hier (oder auf github) einen Kommentar abzugeben, um nach Funktionen zu fragen/Probleme zu melden.

In naher Zukunft werde ich versuchen, einen vollständig interaktiven Modus hinzuzufügen, um die Jobliste einfacher zu durchsuchen. Natürlich wird die klassische Textausgabe weiterhin verfügbar sein (es könnte nützlich sein, die Ausgabe per E-Mail zu versenden oder für eine schnelle Überprüfung der anstehenden/laufenden Jobs).

Beispielausgabe

Befehl qjobs ergibt:

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

Befehl qjobs -o ergibt:

tot: 7

r: 2   qw: 5

Befehl qjobs -o inek -t ergibt (e die verstrichene Zeit seit Start/Unterzeit ist, kann das Format mithilfe der Formatspezifikation angepasst werden. Mini-Sprache von Python; k ist vollständiger Warteschlangenname mit Domäne):

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 gibt eine vollständige Liste der verfügbaren 'Gegenstände'. Jedes dieser Elemente ist verfügbar als:

  • eine Spaltenausgabe (mit -o ITEMS );
  • als Kriterium, um den Job zu zählen und die Gesamtausgabe zu erzeugen, mit -t (zB -t s wie in den beiden ersten Beispielen nach Bundesländern zu zählen);
  • als Kriterium, um den Job mit -s zu sortieren , Standard ist -s ips Das bedeutet, dass die Jobliste vor dem Drucken nach ID, dann nach Priorität und schließlich nach Status sortiert wird.

Das Ergebnis von qjobs -i ist:

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

Dieses Skript funktioniert ziemlich gut. Sieht aus wie aus Cambridge. http://www.hep.ph.ic.ac.uk/~dbauer/grid/myqstat.py

Für 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)

Für 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. Welche Zeichen sind in Windows- und Linux-Verzeichnisnamen verboten?

  2. Rufen Sie Namen und Adressen von exportierten Funktionen in Linux ab

  3. PubkeyAcceptedKeyTypes und ssh-dsa-Schlüsseltyp

  4. Namen für ATA- und SATA-Festplatten in Linux

  5. Syntax von ls --hide=und ls --ignore=

Gogo – Erstellen Sie Verknüpfungen zu langen und komplizierten Pfaden in Linux

Beste Online-Linux-Terminals und Online-Bash-Editoren

Cron-Job erstellen und löschen

Unterschied zwischen einfachen und doppelten Anführungszeichen in Bash Shell

Verstehen der Jobsteuerungsbefehle in Linux – bg, fg und STRG+Z

AWK und Dateinamen mit Leerzeichen darin.