从 shell 命令输出中取消所有 SLURM 作业的最佳方法

从 shell 命令输出中取消所有 SLURM 作业的最佳方法

我提交了很多带有调试时间限制的 SLURM 作业脚本(我忘记更改实际运行的时间)。现在都是同时提交的,所以都是以job ID 197xxxxx开头。现在,我可以做

squeue -u $USER | grep 197 | awk '{print $1}' 

打印我想要删除的作业 ID。但是我如何在所有这些 ID 上使用 scancel 命令。上述 shell 命令的输出如下所示

19726664
19726663
19726662
19726661
19726660
19726659
19726658
19726657
19726656
19726655
19726654
19726653
19726652
19726651
19726650

答案1

squeue -u $USER | grep ^197 | awk '{print $1}' | xargs -n 1 scancel

查看文档了解xargs详细信息。如果scancel接受多个作业 ID(应该如此),您可以省略该-n 1部分。

答案2

为了取消我所有的 slurm 作业(省略 OP grep 197),我发现我必须修剪 squeue 输出的第一行,其中包含列标题,还:

squeue -u $USER | awk '{print $1}' | tail -n+2 | xargs scancel

答案3

这是我一般使用的:

  1. 取消我所有的工作:

    scancel -u <my_user_name>
    
  2. 通过过滤取消:即取消所有 jobId 以 26699 开头的作业):

    squeue --format="%.18i" --me -h | grep -w 26699.* | xargs scancel
    

答案4

由于这是一个简化的解决方案,您还可以这样做:

squeue -u $USER -h | awk '{print $1}' | xargs scancel

这会省略格式选项,而是删除带有-h标志的标题。

相关内容