如何找出已完成的 SLURM 作业的 "command"(批处理脚本文件名)?

How can I find out the "command" (batch script filename) of a finished SLURM job?

我经常有很多来自不同目录的 SLURM 作业 运行。因此,查询作业的工作目录很有用。我可以为队列中的作业(例如待定、运行 等)执行此操作,如下所示:

squeue -u $USER -o "%i %Z"

我可以为完成的作业(例如完成、超时、取消等)执行此操作,如下所示:

sacct -u $USER -o JobID,WorkDir

问题是,有时我有一个目录,里面有两个(或更多)SLURM 批处理脚本,例如submit.sh 和 restart.sh。因此,查询作业的 "command" 也很有用,即批处理脚本的文件名。我可以像这样为队列中的作业执行此操作:

squeue -u $USER -o "%i %o"

但是,通过查看 sacct 的文档并使用 sacct,似乎没有 sacct 的等效选项,因此我目前无法获得完成作业的命令。我也不能对已完成的作业使用 squeue 方法 - 它只是说 slurm_load_jobs error: Invalid job id specified 因为已完成的作业不包含在 squeue 列表中。那么,我怎样才能找到完成的 SLURM 作业的命令(使用 sacct 或其他方式)?

Slurm 确实没有将命令存储在记帐数据库中。两种解决方法:

对于单个用户:使用JobNameComment 来存储提交时的脚本名称。这些都存储在数据库中,但是这种做法容易出错;

集群方面:启用job completion plugin to ElastiSearch,因为这不仅存储脚本名称,还存储全部内容。