ecFlow学习笔记:使用late设置超时报警

目录

最近一段时间,业务系统一直受到串行作业运行卡住的影响。具体表现为:

  1. 作业提交到slurm上
  2. 执行ncl程序画图卡住
  3. 运行超时被slurm杀掉
  4. 脚本捕获trap信号,调用 ecflow_client --abort 与 ecflow 服务通信
  5. 与 ecflow 通讯尚未完成,作业已停止运行,导致ecflow_ui上作业一直处于 active 状态

目前尚未定位具体原因,可能需要与HPC运行维护团队一同寻找。

超时报警一直是业务系统维护的核心需求之一,我们主要通过设置 slurm 的墙钟时间限制。 但上述示例表明即便slurm墙钟时间有效,但作业与ecflow服务的通讯依然可能发生异常,所以需要额外的机制进行报警。

本文介绍如何使用 ecFlow 的 late 属性设置超时报警。

late属性

late属性用于指示任务超时,当某个节点被系统任务超时,ecflow仅会标记该节点,而不采取其他动作。 ecflow_ui会在该节点显示late图标,并在late弹出窗口中显示该节点。

late有下面三种类型:

Submitted

节点处于submitted状态不能超过指定时间(格式为[+]hh:mm)。 Submitted是相对的,所以 + 被忽略。 如果节点处于submitted状态超过该时长,节点会被设置late标签。

Active

节点必须在某个时间点处于active状态(格式hh:mm)。 如果节点在该时间点处于queuedsubmitted状态,会被设置late标签。

Complete

节点必须在某时间运行结束(格式[+]hh:mm)。 如果使用相对时间,则表示从节点变为active后的时间,否则节点必须在给定的时间点运行结束。

方法

定义一个设置late的函数,包括对提交和完成的限制。

def add_late_attribute(node, submitted=(0, 10), complete=(0, 30, True)):
    late = Late()
    late.submitted(*submitted)
    late.complete(*complete)
    node.add_late(late)

默认参数限制节点在submitted状态不能超过10分钟,运行时间不能超过30分钟。

应用

已对业务系统的ncl画图任务添加late属性。

节点超时在ecflow_ui上显示如下。

ecflow_ui中显示late图标

ecflow_ui的late弹出窗口

参考

ecflow文档:late

ecflow教程中文版:late