科学计算, 生活

用于快速作业管理的自定义Linux命令

这是之前的一篇:超算中作业管理系统PBS/Slurm/LSF的常用命令

本篇记录一些常用的自定义 Linux 命令,主要用于快速的作业管理,后续根据需要可能不定期添加更多命令。具体实现步骤是:将以下代码写入用户目录中的 .bashrc 文件,然后通过 source .bashrc 命令使得自定义 Linux 命令生效。

一、使用命令创建 PBS 文件(mkpbs)

创建 mkpbs 命令:

mkpbs() {
  # 参数说明:mkpbs [文件名] [作业名] [节点数] [核心/节点] [Python文件]
  # 默认值
  FILENAME="${1:-task.sh}"  # 第一个参数:文件名(默认 task.sh)
  JOB_NAME="${2:-task}"       # 第二个参数:作业名(默认 task)
  NODES="${3:-1}"            # 第三个参数:节点数(默认 1)
  PPN="${4:-1}"              # 第四个参数:每节点核心数(默认 1)
  PYTHON_FILE="${5:-a.py}"   # 第五个参数:Python 文件(默认 a.py)

  # 生成 PBS 脚本
  cat << EOF > "$FILENAME"
#!/bin/sh
#PBS -N $JOB_NAME
#PBS -l nodes=$NODES:ppn=$PPN
python $PYTHON_FILE
EOF

  echo "已生成文件:$FILENAME"
  echo "├─ 作业名:$JOB_NAME"
  echo "├─ 节点数:$NODES"
  echo "├─ 核心/节点:$PPN"
  echo "└─ 执行文件:$PYTHON_FILE"
}

运行命令 mkpbs,在当前目录中可以得到 task.sh 文件:

#!/bin/sh
#PBS -N task
#PBS -l nodes=1:ppn=1
python a.py

运行命令 mkpbs task.pbs new_task 1 4 b.py,在当前目录中可以得到 task.pbs 文件:

#!/bin/sh
#PBS -N new_task
#PBS -l nodes=1:ppn=4
python b.py

说明:.sh 和 .pbs  后缀对 PBS 作业提交无影响。如果需要运行其他程序,可以在脚本文件中进行修改,将经常使用的 PBS 文件内容作为 mkpbs 默认的文件生成内容。

二、使用简化命令查看状态(q/qn/p/s)

创建 q 命令:

alias q="qstat"

生效后可以通过 q 命令来代替 qstat 命令。

创建 qn 命令:

alias qn="qstat -n"

生效后可以通过 qn 命令来代替 qstat -n 命令。

创建 p 命令:

alias p="pbsnodes -l free"

生效后可以通过 p 命令来代替 pbsnodes -l free 命令。

创建 s 命令(Slurm版本):

alias s="squeue"

生效后可以通过 s 命令来代替 squeue 命令。

如果有其他常用命令,也可以通过设置更多的单字母来代替。

三、使用命令进入到某个任务的工作目录(goto)

创建 goto 命令(PBS 版本,由 ydpang 提供):

goto() {
    # 获取作业的工作目录
    workdir=$(qstat -f "$1" | grep init_work_dir | awk '{print $3}')
    # 检查路径是否存在
    if [ -d "$workdir" ]; then
        cd "$workdir" && echo "已跳转到作业 $1 的工作目录: $workdir"
    else
        echo "错误:无法定位作业 $1 的工作目录" >&2
        return 1
    fi
}

创建 goto 命令(Slurm 版本):

goto() {
    # 获取作业的工作目录
    workdir=$(scontrol show job "$1" | grep WorkDir | awk -F= '{print $2}')
    # 检查路径是否存在
    if [ -d "$workdir" ]; then
        cd "$workdir" && echo "已跳转到作业 $1 的工作目录: $workdir"
    else
        echo "错误:无法定位作业 $1 的工作目录" >&2
        return 1
    fi
}

使用命令 goto 123,快速进入到任务号为 123 的工作目录。

由于不同的任务管理系统的任务详情可能有些不一样,所以脚本不一定作用,这时候可以使用 qstat -f 或 scontrol show job,将任务详情和以上脚本扔给 AI,稍微做个修改应该就能使用。

四、使用命令查看所有任务的工作目录(wdir)

创建 wdir 命令(PBS 版本,由 ydpang 提供):

alias wdir="qstat -f | grep init_work_dir | awk '{print $3}'"

使用命令 wdir 查看所有任务的工作目录。

创建 wdir_jhguan 命令(PBS 版本):

alias wdir_jhguan="qstat -u jhguan -f | grep init_work_dir | awk '{print $3}'"

使用命令 wdir_jhguan 查看 jhguan 用户的所有任务的工作目录。

创建 wdir 命令(Slurm 版本):

alias wdir="scontrol show job | grep WorkDir | awk -F= '{print $2}'"

同样,使用命令 wdir 查看所有任务的工作目录。

16 次浏览

【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code