简介: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 --versionTORQUE 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/torqueTORQUE 的作业缓存和日志会持续增长,尤其是节点多、作业频繁的环境。我见过一份集群因为/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.confpbs.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> 15001TORQUE 的 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/torquetrqauthd 是 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 -ltnp | 15001/15002/15004 在 LISTEN |
| 节点状态 | pbsnodes -a | 节点 state=free |
| 队列状态 | qstat -q | batch 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 源码安装的流程,能帮你在自己的环境里少走几步弯路。
本文还有配套的精品资源,点击获取