GNU/Linux >> Belajar Linux >  >> Linux

qstat dan nama pekerjaan yang panjang

Ini agak berantakan, tetapi ini berfungsi sebagai solusi sederhana untuk dimiliki dalam riwayat perintah. Semua alat standar. Outputnya hampir sama dengan yang Anda dapatkan dari panggilan qstat normal, tetapi Anda tidak akan mendapatkan header:

Satu baris:

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

Deskripsi perintah:

Cantumkan pekerjaan sebagai XML:

qstat -xml

Hapus semua baris baru:

tr '\n' ' '

Tambahkan baris baru sebelum setiap entri pekerjaan dalam daftar:

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

Hapus semua barang XML:

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

Retas untuk menambahkan baris baru di bagian akhir:

grep " "

Kolom:

column -t

Contoh keluaran

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

Mungkin solusi yang lebih mudah:setel SGE_LONG_JOB_NAMES ke -1, dan qstat akan mengetahui ukuran kolom nama:

export SGE_LONG_JOB_NAMES=-1
qstat -u username

Bekerja untuk saya.

Semangat!


Saat ini saya sedang menulis qstat saya sendiri pembungkus untuk mendapatkan keluaran yang bersih, bermanfaat, dan dapat disesuaikan.

Ini adalah repositori github. Proyek telah berkembang terlalu banyak sehingga kode tidak dapat ditempelkan dalam pesan ini.

Itu datang dengan penginstal dan harus bekerja tanpa masalah dengan Python 2.7 dan 3 (skrip instalasi membuat modifikasi jika diperlukan). qjobs -h memberikan beberapa bantuan pada pilihan yang tersedia. Saya akan menulis dokumentasi yang lebih lengkap di hari-hari berikutnya di wiki github.

Saya akan memperbarui pesan ini sesering mungkin untuk mengikuti keadaan proyek saat ini. Silakan berkomentar di sini (atau di github) untuk meminta fitur/melaporkan masalah.

Dalam waktu dekat, saya akan mencoba menambahkan mode yang sepenuhnya interaktif untuk menelusuri daftar pekerjaan dengan lebih mudah. Tentu saja, keluaran teks klasik akan tetap tersedia (mungkin berguna untuk mengirim keluaran melalui email, atau untuk pemeriksaan cepat pekerjaan yang tertunda/berjalan).

Contoh keluaran

Perintah qjobs memberikan:

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

Perintah qjobs -o memberikan:

tot: 7

r: 2   qw: 5

Perintah qjobs -o inek -t memberikan (e adalah waktu yang berlalu sejak waktu mulai/sub, format dapat disesuaikan menggunakan Spek Format. Bahasa Mini Python; k adalah nama antrean lengkap, dengan domain):

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 memberikan daftar lengkap 'item' yang tersedia. Setiap item ini tersedia sebagai:

  • output kolom (dengan -o ITEMS );
  • sebagai kriteria untuk menghitung pekerjaan dan menghasilkan output total, dengan -t (misalnya -t s untuk menghitung berdasarkan negara seperti pada dua contoh pertama);
  • sebagai kriteria untuk mengurutkan pekerjaan dengan -s , standarnya adalah -s ips artinya daftar pekerjaan diurutkan berdasarkan ID, kemudian berdasarkan prioritas dan akhirnya berdasarkan status sebelum dicetak.

Hasil dari qjobs -i adalah:

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

Skrip ini bekerja dengan cukup baik. Sepertinya dari cambridge. http://www.hep.ph.ic.ac.uk/~dbauer/grid/myqstat.py

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

Untuk 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. Membaca Dan Mencari Halaman Man Panjang?

  2. Tentang Mem Dan Vmem?

  3. AWK dan nama file dengan spasi di dalamnya.

  1. Nama untuk disk ATA dan SATA di Linux

  2. sintaks ls --hide=dan ls --ignore=

  3. perintah traceroute:penggantian atau alternatif

  1. Ganti Nama Semua File dan Nama Direktori menjadi Huruf Kecil di Linux

  2. Tutorial Pemrograman C 4 - Variabel dan Memori

  3. Nama Pengguna Dan Host Di Kunci Publik Di Ssh-copy-id?