perl - 哪个作业在哪个节点上运行?
问题描述
这是一个经常出现并挑战我的 AWK 技能的快速问题。如何列出集群上的所有作业以及分配给它们的节点列表。
就像是:
JobId Job Name State Hosts
. . .
29428 _2.0_cont_7.job R fm3/6
29429 _2.2_cont_7.job R fm3/6
29430 _2.4_cont_8.job R fm1/6
29431 _2.6_cont_8.job R fm1/6
29835 taverna R mathserv/40
. . .
sinfo
是否有一个参数qstat
可以提供类似的输出而不需要进一步处理?或者什么是好的perl
或awk
单线来完成这项工作?
这是我目前运行的
qstat -f | awk \
'/Job Id/ {job=$3 ;
if (s > 0) {printf("%6s\t%16s\t%5s\t%8s\n",job,name,state,host); } s+=1}
/exec_host/ {host=$3}
/Job_Name/ {name=$3}
/job_state/ {state = $3}
END {printf("%6s\t%16s\t%5s\t%8s\n",job,name,state,host)}
BEGIN {printf("%6s\t%16s\t%5s\t%8s\n","JobId","Job Name","State","Hosts")}'
更新
这是qstat -f
输出的片段:
Job Id: 29835
Job_Name = taverna
Job_Owner = meos@taverna
interactive = True
job_state = R
queue = all
qtime = Wed Apr 10 12:02:10 2019
mtime = Wed Apr 10 12:02:10 2019
ctime = Wed Apr 10 18:02:10 2019
exec_host = mathserv/40
Priority = 4294873206
euser = meos(1006)
egroup = meos(1000)
Resource_List.walltime = 06:00:00
Resource_List.nodect = 1
Resource_List.ncpus = 40
为集群上运行的每个作业打印此类块。
这里的exec_host
参数标识节点和该节点上的槽数或具有为作业分配的相应槽数的至少一个节点。其余参数是不言自明的。
仅此块的预期输出将是
JobId Job Name State Hosts
29835 taverna R mathserv/40
更新 2
对于任何感兴趣的人,更新原始 AWK 程序以修复一些错误并改进格式。它恰好也适用于 Torque 和 PBS 托管集群。
qstat -f | awk '/Job Id/ {job=$3 ;
if (s > 0) {printf(format,lastjob,user,name,state,host)} ;
lastjob=job ; s+=1}
/exec_host/ {host=$3}
/Job_Name/ {name=$3}
/job_state/ {state = $3}
/Job_Owner/ {user=$3; sub("@.*","",user)}
END {printf(format,lastjob,user,name,state,host)}
BEGIN {format="%10s\t%10s\t%25s\t%5s\t%8s\n";
printf(format,"JobId","Owner","Job Name","State","Hosts")}'
解决方案
如果qstat
手册页上没有您喜欢的内容,请像您一样解析输出。
这是 Perl
qstat -f | perl -wne'
/Job Id:\s+(.*)/ && push(@r, [$1]) or
/(?:Job_Name|job_state|exec_host)\s+=\s+(.*)/ && push(@{$r[-1]}, $1)
}{
printf("%6s\t%16s\t%5s\t%8s\n", ("JobId", "Job Name", "State", "Hosts")
printf("%6s\t%16s\t%5s\t%8s\n", @$_) for @r'
我在哪里复制你的输出格式。}{
语法标记块的开始END
。
该Job Id
行在我们的结果数组中开始了一个新的 arrayref,@r
ID 是它的第一个元素。其他所需字段按出现顺序添加到@r
.
推荐阅读
- python - 将图像添加到 plotly express 图形
- docker - docker-compose up 不适用于远程主机(但 docker 本身可以)
- character-encoding - 哪个编码将 'é' 替换为 '\351'?
- angular - 从角度模式插入后更新表数据
- excel - 项目搜索名称然后复制和粘贴
- python - 如何在 Python 中下载文件?
- python - 打印一个随机数 * n 次(所有不同的数字)
- python - “锻炼”对象没有“锻炼”属性
- python - 如何在运行 Flask 时让 python 日志库在控制台中打印日志?
- asp.net - 如何找出 DynamoDb 表的属性类型?