☰
TORQUE 6.1.1.1源码安装指南:从依赖配置到集群作业调度验证
2026/10/20 16:26:28 网站建设 项目流程

简介:Torque 6.1.1.1 是一个面向高性能计算与集群管理场景的作业调度系统源码包,适合集群运维工程师、HPC研究者或有二次开发需求的开发者使用。其架构由管理节点上的pbs_server、计算节点上的pbs_mom及可独立部署的客户端命令组成,通过该源码可深入理解作业提交、排队、调度与节点监控的底层实现。包内共2000个文件,以C语言源码(1328个c)、头文件(610个h)为主体,并包含大量构建配置与编译辅助文件(如539个in、428个am、375个makefile),以及913个plo和374个po等多语言翻译资源,压缩包整体仅13.45MB,结构紧凑完整。已有836人学习下载。内容预览涉及mom主程序、请求处理及作业管理相关源码,读者可结合具体模块分析Torque的进程交互与状态转换机制,也可用于二次功能开发、定制编译或移植调试,是一份便于按需查阅的轻量级研究素材。

1. TORQUE 6.1.1.1 源码包:为什么我还在装这个老版本资源管理器

torque6 的 6.1.1.1 是我这两年集群环境里翻来覆去装过的一个资源管理器版本。别看它叫 6,实际上是从 PBS/OpenPBS 延续下来的作业调度体系,很多老集群的脚本都按它的命令习惯在跑。装这个包本身不难,但 configure 阶段缺依赖、pbs_server 起不来、节点注册不上这类问题,我几乎每次换机器都要踩一遍。这篇笔记的顺序就是我自己操作时的顺序:先检查环境和依赖,再编译安装,接着配置服务端,然后列出最常见的问题,最后把从 pbsnodes 到 qsub 的验证流程完整跑一遍。适合刚接触作业调度器,准备在某台服务器上做管理节点的人。

2. 安装前的环境检查:依赖、专用账户与主机名解析

TORQUE 的编译安装并不复杂,大部分翻车都发生在“我以为环境没问题”这一步。我见过有人在 configure 阶段因为少了 openssl 头文件反复报错,也有人因为 /etc/hosts 写错导致 pbs_server 起不来。所以这一章先别急着解压源码包,把系统侧的事按下面顺序过一遍。

2.1 操作系统版本与编译依赖:缺哪个包会在 configure 阶段翻车

先确认系统类型和架构,顺便看看编译器在不在:

# 系统版本与架构,确认是不是 64 位 cat /etc/os-release uname -m gcc --version

TORQUE 6.1.1.1 的 configure 是典型的 autoconf C++ 工程,需要 gcc、g++ 和 make 工具链。在 CentOS/Rocky Linux 这类 RHEL 系列发行版上,我一般一次性装齐以下依赖:

# RHEL 系一次性安装编译依赖 yum install -y gcc gcc-c++ make libxml2-devel openssl-devel \ boost-devel ncurses-devel libXt-devel

逻辑说明:TORQUE 的主服务 pbs_server、资源管理器 pbs_mom、调度器 pbs_sched 都以 C++ 源码编译,openssl-devel 提供 SSL 加密相关的头文件,libxml2-devel 用于解析 XML 配置,boost-devel 在编译某些工具时会被 configure 脚本探测。如果你在 Debian/Ubuntu 系,对应的包改成build-essential libssl-dev libxml2-dev libboost-all-dev libxt-dev。

参数说明:uname -m的值决定你之后下载预编译包还是走源码编译;TORQUE 6.1.1.1 官方不一定有对应新发行版的二进制包,源码编译反而最稳。configure 脚本对 boost 没有强制硬依赖,但缺了它,make 阶段可能报boost/program_options.hpp not found,所以我还是建议先装上,省得后面补装再重新 configure。

装完依赖后,可以用 rpm 再核对一遍:

# 核对关键依赖是否已就位,缺哪个包直接显示 rpm -q gcc gcc-c++ make openssl-devel libxml2-devel boost-devel ncurses-devel libXt-devel

这条命令的价值在于把缺失的包名一次列出来。如果某个包返回not installed,补装后不需要重启系统。configure 阶段如果出现error: C++ compiler cannot create executables,多半是 gcc-c++ 没装全,不会被前面的gcc --version骗到,因为那只能证明 C 编译器存在。

还有一点要注意:TORQUE 6 默认使用 SSL 库。新版系统如果同时存在 openssl 的多个版本,configure 有可能抓到旧的头文件,导致 make 时出现EVP_CIPHER_CTX_cleanup一类的符号错误。遇到这种情况,先别急着改代码,用rpm -qa | grep openssl确认版本,再在 configure 用--with-ssl=/usr指定头文件路径即可。这个坑我放在第 5 章详细说。

2.2 创建 pbs 专用账户与目录规划

TORQUE 服务通常以 root 启动,但作业在计算节点上会切换账号。官方文档建议使用专用账户pbs来管理作业执行目录。我习惯先建账户,再定目录:

# 创建 TORQUE 专用的系统账户 useradd -r -d /var/spool/torque -m -s /bin/bash pbs mkdir -p /var/spool/torque chown -R pbs:root /var/spool/torque

逻辑说明:-r表示创建系统账户,-d指定 home 目录,-m顺便把目录建出来。/var/spool/torque是 TORQUE 的默认 spool 目录,服务端数据库、节点状态文件、作业队列缓存都会写在这里。目录属主设为pbs:root能避免运行 mom 时在子目录创建文件出现权限不一致。

参数说明:如果你不想把 spooldir 放在 /var/spool 下,可以在后续 configure 时用--with-spooldir=/data/torque改掉,但计算节点的 mom 也必须用同样的路径启动,否则两者看到的作业目录不一致。我个人的习惯是保持默认,因为默认路径在日志和备份脚本里写死,换位置只会增加维护成本。

目录创建后,建议顺手检查一下所在分区的剩余空间,避免以后日志写满把服务拖垮。TORQUE 的运行数据和作业输出都在这,磁盘满的后果比你想的严重:

# 检查 spool 目录所在分区的剩余空间 df -h /var/spool/torque

TORQUE 的作业缓存和日志会持续增长,尤其是节点多、作业频繁的环境。我见过一份集群因为/var写满,pbs_server 直接进入只读状态,所有作业排队不动的惨况。一般我会预留 20GB 以上,单独给/var/spool/torque挂一块盘更稳。如果你要长期跑大规模作业,尽量别把这目录和系统根分区挤在一起。

2.3 主机名与 /etc/hosts:pbs_server 起不来的第一元凶

TORQUE 6.1.1.1 的 pbs_server 在初始化时会把当前机器的主机名作为服务端标识。如果主机名解析不到具体 IP,后续在pbsnodes -a里看到的节点状态永远是 down。先做下面三个检查:

# 用三条命令快速判断主机名解析状态 hostname hostname -f cat /etc/hosts

逻辑说明:hostname -f会通过系统 NSS 机制解析全名。TORQUE 默认使用短主机名作为节点名,但通信时又需要能反向解析。最稳妥的做法是把“短主机名、完整域名、内网 IP”三者的映射写在同一行。

我一般会在 /etc/hosts 里加一条:

10.0.0.10 control-node control-node.localdomain

参数说明:10.0.0.10 是管理节点内网 IP,control-node是短名,control-node.localdomain是完整名。注意不要把这行写成127.0.0.1 control-node,否则 pbs_server 能启动,计算节点连过来时全部握手超时。这是我的血泪经验,每次新装都先检查 hosts 文件,别再让这种低级问题浪费半天。

检查解析是否一致,除了看 hosts 文件,还可以用 getent 和 ping 两条命令从另一侧验证实际生效的地址:

# getent 输出和 /etc/hosts 是否一致 getent hosts $(hostname) ping -c 1 $(hostname)

如果输出的是 127.0.0.1,说明 hosts 文件里缺少真正的内网 IP 映射。TORQUE 的 mom 在向 server 注册时,会先用gethostname拿主机名,再用getaddrinfo拿地址;一旦拿到的是回环地址,server 端登记的就是 127.0.0.1,其他节点访问必然失败。

如果是多网卡机器,还要确认 TORQUE 使用哪个 IP 作为监听地址。我看到有的服务器有eth0管理网和eth1业务网,TORQUE 默认绑定第一个可用地址。如果你希望固定到管理网,可以在/etc/hosts里只写管理网 IP 对应的主机名,或者在 pbs.conf 里配合PBS_MOM_IP这类变量指定。这个属于高级配置,实际部署时再按拓扑调整。

3. 编译安装 TORQUE 6.1.1.1:configure、make 与安装后脚本

依赖检查和账户准备做完后,下面进入源码编译环节。这里我用的 prefix 是/usr/local/torque,和系统自带的 PBS 区分开,后续升级或卸载只需要删掉这个目录,不会污染系统。

3.1 解压源码包与 configure:prefix、spooldir、default-server 三个参数

把torque-6.1.1.1.tar.gz上传到服务器后执行:

# 解压并进入源码目录 tar xzf torque-6.1.1.1.tar.gz cd torque-6.1.1.1 ./configure --prefix=/usr/local/torque \ --with-spooldir=/var/spool/torque \ --with-default-server=control-node

逻辑说明:--prefix指定安装根目录,TORQUE 的所有 bin、sbin、lib 都会装到/usr/local/torque下;--with-spooldir必须和 2.2 里的目录一致,pbs_server 的数据库、mom 的节点缓存都在这里;--with-default-server写入默认的 server 主机名,这样执行qsub时不用每次加-S参数。

参数说明:--with-default-server的值必须能在 2.3 的 /etc/hosts 里反解析到本机。如果你有多个集群,建议写成完整的control-node.localdomain,避免 DNS 配置变化后 TORQUE 找不到服务端。另外,configure有时会因为当前终端 locale 不是 UTF-8 而出 warning,一般不用管,真正要紧的是末尾几行 summary 信息。看完 summary 再执行 make,别让 configure 的输出一闪而过。

configure 如果报checking for XML... no或者openssl/ssl.h not found,回到 2.1 补装依赖。我遇到最多的是 libxml2-devel 没装全,因为系统里默认有 libxml2 运行库,但头文件在单独的 dev 包里。

在动 configure 之前,还可以先看一眼支持参数,避免漏掉你想指定的路径:

# 查看与路径相关的 configure 可选项 ./configure --help | grep -E "prefix|spooldir|default-server|ssl"

TORQUE 6.1.1.1 的 configure 会把这些探测结果打印出来,等待你直接回车。有一个容易忽略的参数是--with-scp=/usr/bin/scp,TORQUE 默认用 scp 在节点间传作业脚本,如果你的系统里 scp 路径不在默认位置,可以在 configure 时显式指定。绝大多数发行版 scp 就在 /usr/bin/scp,所以不加也行。

3.2 make 与 make install:不要跳过构建检查

configure 通过后执行编译:

# 并行编译,注意内存较小的机器把 nproc 换成 2 make -j$(nproc) make install

逻辑说明:make -j$(nproc)让 CPU 多核并行编译,TORQUE 6.1.1.1 整个包在 8 核机器上大约几分钟。如果中途报编译错误,先把-j去掉,单核重跑一次,便于定位是并发问题还是真正的源码错误。

make install默认把可执行文件放到 prefix 对应的目录下。执行完可以检查:

# 应能看到 pbs_server、pbs_mom、pbs_sched、trqauthd 四个文件 ls -l /usr/local/torque/sbin/

参数说明:这里应能看到pbs_server、pbs_mom、pbs_sched、trqauthd四个主程序。如果make阶段出现c++: command not found,说明没装 gcc-c++,装上后重新 configure。如果出现cannot find -lboost_program_options,检查 boost-devel 是否安装,或者用--without-boost重新 configure。这里的取舍是:不用 boost 也能编译,但某些工具如pbs_habitat可能不能用,所以我一般保留。

编译时还有一个容易忽略的问题:make -j因为内存不足会出现internal compiler error: Killed。这通常发生在编译器和系统资源同时抢占内存的机器上,像是 2GB 内存的小服务器。解决办法是限制并行度,例如make -j2,不要盲目加大并行数。TORQUE 的源码不算大,-j2最多慢一两分钟,不用冒险。

3.3 安装服务脚本与初始化 pbs.conf

TORQUE 源码包里自带 SysV init 脚本,在contrib/dist/init.d/目录下。复制到系统目录:

# 拷贝源码包自带的 init 脚本 cp contrib/dist/init.d/{pbs_server,pbs_mom,pbs_sched,trqauthd} /etc/init.d/ chmod +x /etc/init.d/pbs_*

逻辑说明:这些脚本是从源码包原样拿来的,比网上抄来的 systemd unit 更贴合 6.1.1.1 的行为。如果你的系统用 systemd,也可以把这些 init 脚本通过systemd-sysv-generator封装,但我不建议,直接用service命令管起来更省事。

接着需要写配置文件/etc/torque/pbs.conf。TORQUE 的启动脚本会先读这个文件,没有它,pbs_server、pbs_mom 都找不到服务端地址,也不会自动拉起。下面是我在一台管理节点上用的内容,变量含义会逐一说明:

PBS_SERVER=control-node PBS_START_SERVER=1 PBS_START_MOM=1 PBS_START_SCHED=1 PBS_START_TRQAUTH=1 PBS_MOM_SERVER=control-node

参数说明:PBS_SERVER是服务端主机名,必须和 configure 里的 default-server 一致;PBS_START_SERVER设为 1 表示开机自启 pbs_server;PBS_START_MOM表示本机作为计算节点的 mom 也要启动;PBS_MOM_SERVER让 mom 知道该向哪个 server 注册。如果在计算节点上,服务端的这几个项要置 0,只保留PBS_START_MOM=1。

文件写好之后,权限也要注意。TORQUE 的启动脚本以 root 身份读取配置,但客户端 qstat 要能读到同样的内容,权限如果太严反而会让普通用户找不到配置文件:

# 固定 pbs.conf 属主和权限 chmod 644 /etc/torque/pbs.conf chown root:root /etc/torque/pbs.conf

pbs.conf 如果被改成 600,非 root 用户执行 qstat 时可能会读不到配置信息,导致命令直接报错。另外文件里不要带行首空格,环境变量解析时会把它保留进值,而 TORQUE 对主机名是精确匹配的,小数点差一个都连不上。

注意:pbs.conf 里的主机名、/etc/hosts 的第一列、configure 的--with-default-server必须三处一致。不一致时,pbs_server 可能启动后立即退出。

4. 初始化服务端数据库:从 pbs.conf 到 qmgr 队列配置

pbs.conf 写好后,还不能马上用。第一次启动 pbs_server 前必须先初始化数据库,否则日志里全是Cannot open server_priv之类的错误。这一章讲清楚初始化、队列创建和 mom 注册三个环节。

4.1 用 pbs_server -t create 初始化服务端数据库

第一次尝试启动前,先手动创建数据库:

# 初始化服务端数据库,只需执行一次 /usr/local/torque/sbin/pbs_server -t create

逻辑说明:-t create会在/var/spool/torque下生成server_priv、server_logs、spool等目录结构,并把当前主机名写入数据库。如果 pbs.conf 里的PBS_SERVER和当前主机名不一致,这个命令会报错,这时候去改 pbs.conf 或者改 /etc/hosts,不要绕过。

执行完初始化后启动服务:

# 按 server -> sched -> trqauthd -> mom 顺序启动 /etc/init.d/pbs_server start /etc/init.d/pbs_sched start /etc/init.d/trqauthd start /etc/init.d/pbs_mom start

参数说明:启动顺序有讲究——server 必须先于 sched 和 mom,因为调度器和 mom 要向 server 注册。trqauthd是客户端认证进程,不启动的话后面 qsub 会报trqauthd: Connection refused。服务启动后用ps -ef | grep pbs_应该能看到四个进程。

第一次启动后,最好盯着日志看几秒钟:

# 实时查看当天服务端日志 tail -f /var/spool/torque/server_logs/$(date +%Y%m%d)

TORQUE 的日志按日期写到server_logs下,文件名日期当天。如果看到pbs_server: comm error或者No such file,按第 5 章的方法排查。如果日志没有输出,说明数据库初始化正常。

如果pbs_server -t create后想重新来,可以用rm -rf /var/spool/torque/server_priv清掉数据库,再执行一次创建命令。这是我常用的后悔药,比反复排查数据库半损坏状态快得多。注意执行rm前先停掉 pbs_server。

4.2 使用 qmgr 创建默认队列与调整调度参数

初始化完成并启动服务后,用 qmgr 创建队列:

# 创建执行队列并启用 /usr/local/torque/bin/qmgr -c "create queue batch queue_type=execution" /usr/local/torque/bin/qmgr -c "set queue batch enabled=true" /usr/local/torque/bin/qmgr -c "set queue batch started=true" /usr/local/torque/bin/qmgr -c "set server default_queue=batch"

逻辑说明:第一行创建一个名为 batch 的执行队列;第二三行分别把 enabled 和 started 设为 true,否则作业提交后直接进 Q 状态排队且不会被调度;最后一行把默认队列指到 batch,用户执行 qsub 时不用显式-q batch。

参数说明:queue_type=execution表示这是可运行作业的队列,不是路由队列。如果需要限制节点数或 CPU 数,可以加set queue batch resources_max.ncpus = 16、set queue batch resources_min.select = 1之类的语句。这些参数都可以在 qmgr 里继续加,不影响已有作业。如果你需要连续调整多个队列参数,也可以直接执行 qmgr 进入交互式配置,在里面逐条输入命令:

# 进入交互式配置模式,输入 q 退出 /usr/local/torque/bin/qmgr

进入后输入print server可以看当前服务端配置,输入print queue batch看队列定义。如果你只是快速配置,-c一行一条的方式更符合脚本习惯,还能写进部署脚本里自动执行。要注意 qmgr 的-c参数中,队列名如果带空格会解析失败,所以队列名我用 batch 这样不带特殊字符的名字。

创建完队列后,建议用下面两条命令查看当前服务端配置,结果里应该能看到 batch 队列已启用,以及控制节点 mom 的注册状态。如果节点状态不是 free,就按第 5 章处理:

# 查看队列和节点注册结果 /usr/local/torque/bin/qstat -q /usr/local/torque/bin/pbsnodes -a

逻辑说明:qstat -q显示队列状态,pbsnodes -a显示已注册的计算节点。此时应该能看到控制节点的 mom 出现在列表中,状态为 free 或 down。如果是 down,下一章会专门说。

4.3 配置 MOM 文件 mom_priv/config

控制节点同时也是计算节点,需要让本机的 pbs_mom 正确识别自己。编辑/var/spool/torque/mom_priv/config:

$pbsserver control-node $clienthost control-node

逻辑说明:$pbsserver告诉 mom 向哪个 server 注册,$clienthost允许哪些主机向该 mom 提交作业。在一台启动 MOM 的计算节点上,两行缺一不可。

参数说明:如果有多个管理节点或计算节点,$clienthost可以写多个 hostname,用空格隔开。写完 config 后重启 mom:

# 重启本机 MOM 使配置生效 /etc/init.d/pbs_mom restart

在独立计算节点上,pbs.conf 需要和这里配合。通常计算节点的 pbs.conf 里PBS_SERVER指向管理节点,PBS_START_MOM=1,其他服务全置 0。这样计算节点上的 mom 启动时会自己找到 server,不需要本地跑 server。另外mom_priv/config的文件属主建议设为root:pbs,权限 644。有些发行版默认 umask 会让文件属主变成当前用户,导致 mom 启动时读取 config 失败,这个问题经常被误判成注册失败。

5. TORQUE 6 安装避坑:五个常见问题与排查记录

这一章是我实际装 TORQUE 6.1.1.1 时最容易遇到的坑,全部按“现象 → 原因 → 解决”的顺序写,可以直接对号入座。如果你在安装过程中出了问题,先到这里找找看。

5.1 pbs_server 启动失败:提示 Cannot open server_priv 数据库

现象:service pbs_server start后进程立刻退出,查看/var/spool/torque/server_logs/xxxxxx日志,看到Cannot open file /var/spool/torque/server_priv/serverd或类似信息。原因:数据库尚未初始化,pbs_server -t create没有执行成功。解决:先停掉服务,删除可能残缺的 server_priv 再重建:

# 清理残缺数据库并重新初始化 /etc/init.d/pbs_server stop rm -rf /var/spool/torque/server_priv /usr/local/torque/sbin/pbs_server -t create /etc/init.d/pbs_server start

逻辑说明:server_priv是 TORQUE 服务端的核心数据库,初始化失败时文件中没有完整的 serverd 记录,强制清掉从头创建是成本最低的恢复方式。注意不要在一个已经运行过服务且里面有作业记录的目录上直接 rm。如果集群里有在跑的任务,应该先qdel清理,或者在 maintenance 时间窗内操作。这个删除命令是我的后悔药,但对生产环境要慎重。

5.2 节点状态一直是 down,pbsnodes 结果显示 state = down

现象:pbsnodes -a显示 host down,但ps -ef能看到 pbs_mom 在跑。原因:mom 没有收到 server 的注册响应。最常见是 pbs.conf 里PBS_MOM_SERVER写错,或者/etc/hosts里控制节点的 IP 配成了 127.0.0.1。解决:统一两边的 server 名,检查/etc/init.d/pbs_mom的启动环境变量是否包含/usr/local/torque/lib。我一般会先执行:

# 检查 mom 的动态库是否都有对应文件 ldd /usr/local/torque/sbin/pbs_mom | grep "not found"

如果动态库有 not found,按 5.4 的方法加 ld.so.conf。然后再重启 pbs_mom。如果 mom 是编译装的而 init 脚本里 LD_LIBRARY_PATH 没有包含 prefix/lib,也容易出现“进程在,但注册不上”的玄学问题。

还可以用pbsnodes -a -x查看详细 XML,里面会给出 node 的MomPort和State。如果 state 一直是 down,而 mom 也确实在运行,试着用下面的命令测试节点到 server 的端口连通性:

# 测试节点到 server 的 15001 端口连通性 nc -vz <server-ip> 15001

TORQUE 的 mom 启动后每隔一段时间向 server 发心跳,只要网络不通就会在心跳超时后被标记 down。这种问题在防火墙策略变更后特别常见,检查顺序应该是 hosts 解析、动态库、端口,最后再怀疑 mom 配置本身。

5.3 qsub 提交作业后一直停留在 Q 状态,调度器不启动

现象:echo sleep 30 | qsub返回作业号,但qstat -a里作业一直是 Q。原因:队列没有置为 started,或者 pbs_sched 没启动。排查:

# 队列状态和调度进程缺一不可 qstat -q ps -ef | grep pbs_sched

解决:如果队列未启动,执行 4.2 里的set queue batch started=true;如果 pbs_sched 不在,/etc/init.d/pbs_sched start。还有个隐蔽原因:pbs_sched 启动时读不到server_priv/sched_config,导致调度循环空转。这时需要检查 /var/spool/torque 的属主,改成 pbs:root 后重启调度器。

逻辑说明:Q 状态只是作业进入队列,是否变成 R 状态要看调度器会不会分配节点。sched 进程不在,server 不会主动去干调度这种事。我遇到过因为服务端和调度器启动顺序颠倒,pbs_sched 先启动、server 还没创建好队列,导致 sched 一直挂起。这种情况重启 pbs_sched 就能解决。

5.4 客户端报错:动态库 libtorque.so 找不到

现象:qsub: error while loading shared libraries: libtorque.so.2: cannot open shared object file。原因:make install之后,动态库/usr/local/torque/lib不在系统的动态链接器搜索路径里。解决:

# 把 TORQUE 库目录加入系统动态链接配置 echo "/usr/local/torque/lib" > /etc/ld.so.conf.d/torque.conf ldconfig

参数说明:ldconfig 会重建动态链接器缓存。执行完再qstat就不报错了。如果机器上有多个 TORQUE 版本,这个文件里的路径顺序会影响加载,注意不要同时写多个版本。还有一种临时办法是给用户环境加LD_LIBRARY_PATH=/usr/local/torque/lib,但那只对当前 shell 有效,服务脚本里往往拿不到,所以长期方案还是写 ld.so.conf。

5.5 TRQAUTH 认证失败:qsub 报 trqauthd connection refused

现象:qsub 提交时立即报trqauthd: Connection refused或authentication failed。原因:trqauthd 没有启动,或者它与 pbs_server 之间的缓存目录权限不对。解决:

# 启动 trqauthd 并修正 spool 目录属主 /etc/init.d/trqauthd start chown -R pbs:root /var/spool/torque

trqauthd 是 TORQUE 的认证代理,它需要在 spooldir 下读写 auth 信息。如果目录属主不对,即使进程起来了,认证依然失败。这个坑我第一次装时查了两小时,最后发现是 make install 后 tel 目录权限被 umask 搞坏了。

还可以检查/var/spool/torque/trqauthd目录是否存在。如果不存在,说明启动时没有自动创建,可以在启动前手动创建并设置属主:

# 手动创建认证目录并设置属主 mkdir -p /var/spool/torque/trqauthd chown pbs:root /var/spool/torque/trqauthd

另外,如果系统迁移过 TORQUE,老机器上的 auth key 和新机器不一致,也会导致认证失败,这时需要清掉/var/spool/torque/spool/authdir下的密钥重新注册。这个操作会影响正在运行的任务,执行前先排空队列。

6. 装完怎么验证跑通:从 pbsnodes 到 qsub 全套检查

验证流程不是随便看一眼服务起来就完了,要把“提交—调度—执行—返回”整条链路走一遍。我从第一次装 TORQUE 6.1.1.1 起就形成了下面的检查序列,装完新环境先跑一遍,再交出去。

6.1 进程与端口检查

# 先看进程,再看端口监听状态 ps -ef | grep -E "pbs_server|pbs_sched|pbs_mom|trqauthd" | grep -v grep ss -ltnp | grep -E "15001|15002|15004"

TORQUE 默认监听端口:pbs_server 的 15001,pbs_mom 的 15002,pbs_sched 的 15004。如果 15001 没出现,说明 server 初始化失败,结合第 5 章检查日志;如果 15002 没出现,说明 mom 没起来。端口检查这一步能过滤掉进程假死或端口冲突的情况。

6.2 pbsnodes 与 qsub 全链路测试

# 提交一个 5 秒 sleep 作业,观察状态流转 /usr/local/torque/bin/pbsnodes -a /usr/local/torque/bin/qstat -q echo "sleep 5; hostname; date" | /usr/local/torque/bin/qsub /usr/local/torque/bin/qstat -a

执行逻辑:第一条看计算节点状态,正常是 free;第二条看队列状态,batch 队列应该 enabled 且 started;第三条提交一个 5 秒的简单作业;第四条看作业状态。等作业变成 R,再等一下,用qstat看作业是否结束,或者看系统日志确认输出文件生成。

检查项命令成功标准
服务进程ps -ef | grep pbs_4 个进程存在
监听端口ss -ltnp15001/15002/15004 在 LISTEN
节点状态pbsnodes -a节点 state=free
队列状态qstat -qbatch enabled started
作业调度qsub + qstat状态由 Q 变为 R 再变 C

6.3 清理测试作业与固化的验证习惯

验证结束后把测试作业删除:

# 删除测试作业,统一取当前队列中的 ID qdel $(/usr/local/torque/bin/qstat | awk 'NR>2 {print $1}')

每次装完 TORQUE,我都会强制走一遍上面的检查表:先看节点,再提交一个 sleep 作业,等它从 Q 变 R,再等它结束,整个过程不到一分钟。从那以后,我很少再因为配置问题被叫回机房。希望这组来自 6.1.1.1 源码安装的流程,能帮你在自己的环境里少走几步弯路。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询