我正在使用一个使用 PBS/Torque 进行作业调度的计算集群。队列有时可能会很长,例如,我现在在超过 800 个队列中提交了一些作业(据报告showq
显示了完整的作业列表,但据我所知,这些不一定在执行顺序)。
我想知道我的工作在队列中的哪个位置;在我之前处理多少?我想得到一些输出,如:Job <id>: 417/862
. 这样我至少会有一些进展和等待时间的迹象。但是,我无法找到如何做到这一点。可以做到吗,怎么做?
我正在使用一个使用 PBS/Torque 进行作业调度的计算集群。队列有时可能会很长,例如,我现在在超过 800 个队列中提交了一些作业(据报告showq
显示了完整的作业列表,但据我所知,这些不一定在执行顺序)。
我想知道我的工作在队列中的哪个位置;在我之前处理多少?我想得到一些输出,如:Job <id>: 417/862
. 这样我至少会有一些进展和等待时间的迹象。但是,我无法找到如何做到这一点。可以做到吗,怎么做?
我不确定我是否可以指望排队的作业会按照 提供的顺序执行showq
,但经过更多研究,它看起来确实如此。
打印的队列showq
格式如下:
ACTIVE JOBS--------
[table headers]
[listing of active jobs]
IDLE JOBS--------
[table headers]
[listing of idle jobs]
BLOCKED JOBS----------
[table headers]
[listing of blocked jobs]
基于这种格式,我想出了以下 bash 脚本,以在给定作业 id 的情况下在队列的空闲部分中查找作业位置:
job=$1
idlestart=`showq | grep "IDLE JOBS" -n | cut -d: -f1`
jobline=`showq | grep -n $job | cut -d: -f1`
place=`expr $jobline - $idlestart - 2`
echo "Idle Jobs section starts at line $idlestart"
echo "Job $job at line $jobline"
echo "Place in queue: $place"
示例输出:
$ ./placeinq 6565618
Idle Jobs section starts at line 343
Job 6565618 at line 387
Place in queue: 42