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)