软件特性
runjob为每个任务创建了一个任务对象,在内部维护了一个运行时任务队列,并根据用户定义的任务依赖关系,创建出任务依赖的有向无环图DAG(Directed acyclic graph)对象。可灵活控制并行运行的任务量,并及时根据任务依赖关系运行新的任务。
主要特性
支持本地任务、SGE集群任务、Slurm集群任务的管理。
每个任务都唯一对应一个日志文件,记录着任务的全部输出和任务运行状态。
任务运行失败时可以选择是否将任务重新提交到任务队列。
程序中断时重新运行,会自动跳过运行成功的任务,只运行失败或还未运行的任务。
程序被kill或者终止的情况,会自动清理由程序创建出来的任务,避免计算资源的浪费。
在shell脚本中的任务也支持为每行命令定义运行时使用的cpu和内存资源。
支持通过参数选择只想要运行的部分任务而不是全部任务,部分运行的任务也能自动跳过已经运行成功的任务。
支持自定义任务运行前或任务运行结束后的
init或callback功能。支持
envs/vars变量展开,自动按笛卡尔积生成组合任务。支持
includes引入外部规则文件,复用任务定义。支持通过
--dag和--dag-extend输出任务依赖图。……
主要模块对象
class RunJob()封装了shell脚本任务处理对象,提供了任务检查、投递、状态监控、日志输出、异常处理相关方法。
class RunFlow()封装了job文件格式任务的处理对象,继承自
RunJob,提供了任务依赖图构建、扩展等流程编排方法。class JobQueue()封装了运行中的任务队列,基于
OrderedSet实现,用于控制和记录任务运行。class Job(Jobutils)封装了提交任务的对象,记录着任务的命令、依赖关系、资源、状态等信息,提供了任务检查、任务输出等方法。
class Jobfile() / Shellfile()封装了任务文件输入的对象,提供了用户输入任务的相关属性和方法。
Shellfile用于 shell 脚本格式解析,Jobfile用于 job 格式解析。class DAG()封装了任务依赖的有向无环图对象,记录着任务节点的依赖关系和依赖处理方法。
class Config()封装了配置文件和参数相关的对象,用于参数和配置文件的解析和输出。