adr*_*rin 36 linux bash4 sungridengine
我怎样才能qstat
给我完整的工作名称?
我知道qstat -r
提供有关任务的详细信息,但它太多了,并且包含了资源要求.
该qstat -r
输出是这样的:
131806 0.25001 tumor_foca ajalali qw 09/29/2014 15:49:41 1 2-100:1
Full jobname: tumor_focality-TCGA-THCA-ratboost_linear_svc
Hard Resources: distribution=wheezy (0.000000)
h_rt=72000 (0.000000)
mem_free=15G (0.000000)
h_vmem=15G (0.000000)
h_stack=256M (0.000000)
Soft Resources:
131807 0.25001 vital_stat ajalali qw 09/29/2014 15:49:41 1 2-100:1
Full jobname: vital_status-TCGA-LGG-ratboost_linear_svc
Hard Resources: distribution=wheezy (0.000000)
h_rt=72000 (0.000000)
mem_free=15G (0.000000)
h_vmem=15G (0.000000)
h_stack=256M (0.000000)
Soft Resources:
Run Code Online (Sandbox Code Playgroud)
现在我唯一的选择就是根据grep
需要输出:
$ qstat -r | grep "Full jobname" -B1
--
131806 0.25001 tumor_foca ajalali qw 09/29/2014 15:49:41 1 2-100:1
Full jobname: tumor_focality-TCGA-THCA-ratboost_linear_svc
--
131807 0.25001 vital_stat ajalali qw 09/29/2014 15:49:41 1 2-100:1
Full jobname: vital_status-TCGA-LGG-ratboost_linear_svc
Run Code Online (Sandbox Code Playgroud)
我能做得更好,以获得更好的输出吗?
mab*_*ahj 38
这有点凌乱,但它可以作为命令历史记录中的简单解决方案.所有标准工具.输出与普通qstat调用的输出几乎相同,但是你不会得到标题:
一内胆:
qstat -xml | tr '\n' ' ' | sed 's#<job_list[^>]*>#\n#g' \
| sed 's#<[^>]*>##g' | grep " " | column -t
Run Code Online (Sandbox Code Playgroud)
命令描述:
将作业列为XML:
qstat -xml
Run Code Online (Sandbox Code Playgroud)
删除所有换行符:
tr '\n' ' '
Run Code Online (Sandbox Code Playgroud)
在列表中的每个作业条目之前添加换行符:
sed 's#<job_list[^>]*>#\n#g'
Run Code Online (Sandbox Code Playgroud)
删除所有XML内容:
sed 's#<[^>]*>##g'
Run Code Online (Sandbox Code Playgroud)
哈克最后添加换行符:
grep " "
Run Code Online (Sandbox Code Playgroud)
Columnize:
column -t
Run Code Online (Sandbox Code Playgroud)
示例输出
351996 0.50502 ProjectA_XXXXXXXXX_XXXX_XXXXXX user123 r 2015-06-25T15:38:41 xxxxx-sim01@xxxxxx02.xxxxx.xxx 1
351997 0.50502 ProjectA_XXX_XXXX_XXX user123 r 2015-06-25T15:39:26 xxxxx-sim01@xxxxxx23.xxxxx.xxx 1
351998 0.50502 ProjectA_XXXXXXXXXXXXX_XXXX_XXXX user123 r 2015-06-25T15:40:26 xxxxx-sim01@xxxxxx14.xxxxx.xxx 1
351999 0.50502 ProjectA_XXXXXXXXXXXXXXXXX_XXXX_XXXX user123 r 2015-06-25T15:42:11 xxxxx-sim01@xxxxxx19.xxxxx.xxx 1
352001 0.50502 ProjectA_XXXXXXXXXXXXXXXXXXXXXXX_XXXX_XXXX user123 r 2015-06-25T15:42:11 xxxxx-sim01@xxxxxx11.xxxxx.xxx 1
352008 0.50501 runXXXX69 usr1 r 2015-06-25T15:49:04 xxxxx-sim01@xxxxxx17.xxxxx.xxx 1
352009 0.50501 runXXXX70 usr1 r 2015-06-25T15:49:04 xxxxx-sim01@xxxxxx01.xxxxx.xxx 1
352010 0.50501 runXXXX71 usr1 r 2015-06-25T15:49:04 xxxxx-sim01@xxxxxx06.xxxxx.xxx 1
352011 0.50501 runXXXX72 usr1 r 2015-06-25T15:49:04 xxxxx-sim01@xxxxxx21.xxxxx.xxx 1
352012 0.50501 runXXXX73 usr1 r 2015-06-25T15:49:04 xxxxx-sim01@xxxxxx13.xxxxx.xxx 1
352013 0.50501 runXXXX74 usr1 r 2015-06-25T15:49:04 xxxxx-sim01@xxxxxx11.xxxxx.xxx 1
Run Code Online (Sandbox Code Playgroud)
小智 10
也许更简单的解决方案:将 SGE_LONG_JOB_NAMES 设置为 -1,qstat 将计算出名称列的大小:
export SGE_LONG_JOB_NAMES=-1
qstat -u username
Run Code Online (Sandbox Code Playgroud)
为我工作。
干杯!
这个脚本效果很好.它看起来像是来自剑桥.http://www.hep.ph.ic.ac.uk/~dbauer/grid/myqstat.py
对于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)
Run Code Online (Sandbox Code Playgroud)
对于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)
Run Code Online (Sandbox Code Playgroud)