论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
主机系统
›
linux
›
Linux服务器PBS任务队列作业提交脚本的使用方法 ...
Linux服务器PBS任务队列作业提交脚本的使用方法
我爱普洱茶
金牌会员
|
2024-7-26 20:10:24
|
显示全部楼层
|
阅读模式
楼主
主题
986
|
帖子
986
|
积分
2958
本文介绍在
Linux
服务器中,通过
PBS
(Portable Batch System)作业管理系统脚本的方式,提交任务到
服务器
队列,并执行任务的方法。
迩来,需要在学校公用的超算中执行代码任务;而和多数超算设备一样,其也是需要通过作业队列的方式,来提交、管理、排序不同用户的任务,从而使得不同用户都可以较为公平地使用超算设备的资源。由于学校的这个超算是基于
PBS
来提交任务的,所以这里就介绍一下撰写
PBS
脚本,从而将自己的
代码执行需求
提交给
服务器
(也就是提交任务)的方法。
其中,
PBS
(Portable Batch System)是一个用于管理、调度盘算任务的开源软件;其是一个常用的作业调度系统,用于在大规模盘算集群或超级盘算机上管理并分配盘算资源。在使用时,我们需要起首提交作业到盘算集群,
PBS
将会根据资源可用性、作业优先级等因素进行作业调度和分配。其根本工作流程如下:
用户编写
PBS
脚本,描述任务的资源需求、执行命令和其他相关信息。
用户使用
PBS
命令,将上述编写好的脚本提交到
PBS
系统。
PBS
系统根据脚本中作业的资源需求和集群的可用资源情况,将作业放入作业队列中等待执行。
当有可用的盘算资源时,
PBS
系统会选择一个作业并将其分配给相应的盘算节点。
作业在盘算节点上执行,直到完成,或达到预设的运行时间限定,或任务执行时堕落等。
那么接下来,就介绍一下撰写
PBS
脚本,并基于其提交自己的任务到服务器中的方法。
起首明确一下本文的需求。已知当前在服务器的某个路径下,我们有一个可执行文件(或者是有1个
Python
代码文件);我们希望后续在超算中,对这个可执行文件(或者
Python
代码文件)加以运行。
明确了需求,接下来就可以开始操纵。起首,假如有需要,我们可以cd进入自己的工作目录。我这里就直接进入存放有可执行文件的目录中;具体代码如下。
cd Data_Reflectance_Rec
复制代码
随后,基于如下代码检察一下当前路径中的文件。ls用于列出目录中的文件和子目录。
ls
复制代码
接下来,基于如下代码创建
PBS
脚本,我在这里将其命名为py_task.pbs;其中,.pbs就是
PBS
脚本文件的固定拓展名。后续我们向
PBS
系统提交任务时所用的脚本,就是这个文件。
touch py_task.pbs
复制代码
其中,touch是一个常用的命令,用于创建空白文件或更新已存在文件的访问和修改时间戳。创建完毕后,可以基于如下代码再次看一下当前路径下的文件。
ls
复制代码
执行上述代码,如下图所示。可以看到,py_task.pbs这个
PBS
脚本文件已经创建完毕了。
创建脚本文件完毕后,我们即可开始编辑这个文件。在这里,我选择基于
Vim
来编辑,所以执行如下的代码即可。
vim py_task.pbs
复制代码
其中,
Vim
是一个强大的文本编辑器,广泛用于命令行环境下代码的编写和文本的编辑。执行上述代码,如下图所示。可以看到,py_task.pbs这个
PBS
脚本文件已经被
Vim
打开了。
接下来,按下i键,进入文本编辑状态;如下图所示。
随后,即可在
Vim
中编辑
PBS
脚本文件。在这里,我们给出2个
PBS
脚本文件的模板;其中,第1个模板如下所示。
#!/bin/bash
#PBS -N py_task
#PBS -q rtlab1_4
#PBS -l nodes=1:ppn=4
#PBS -l walltime=00:30:00
#PBS -o /data1/home/LiliAircas/Data_Reflectance_Rec/task/py_task.out
#PBS -e /data1/home/LiliAircas/Data_Reflectance_Rec/task/py_task.err
hostname
date "+%Y/%m/%d %H:%M:%S"
python /data1/home/LiliAircas/Data_Reflectance_Rec/code/Alignment.py
date "+%Y/%m/%d %H:%M:%S"
最后注意记得留一个空行
复制代码
其中,第1行是一个
shebang
(也称为
hashbang
)行,指定了用于表明该脚本的表明器。在这里,/bin/bash表现该脚本将由
Bash
表明器执行。
接下来,从第2行开始的这些#开头的语句,不是注释,而是
PBS
作业调度系统的作业指令。这些指令以#PBS开头,指定了不同的选项:-N py_task表现作业的名称为py_task,-q rtlab1_4表现将作业提交到rtlab1_4队列中;-l nodes=1:ppn=4表现指定使用1个节点(node)和4个处理惩罚器(processor)来运行作业;-l walltime=00:30:00表现作业的最长运行时间为30分钟。随后的2行代码,分别指定了作业的
标准输出
、
错误输出
所在的文件。
紧接着,随后的2行分别输出当前执行脚本的主机名和当前的日期时间;随后,就开始调用
Python
表明器执行Alignment.py这个
Python
代码文件了。最后,再次输出当前的日期时间,从而使得我们可以基于其大概相识到任务的执行时长。
最后的空行,有的教程说是为了符合脚本文件的规范,提供可读性和布局上的清晰性;也有教程说,有些版本的服务器上假如不加这个空行,会导致无法识别脚本命令。所以为了确保万一,我就加上了1行空行。
上述脚本文件编辑完毕后,如下图所示。这里需要注意:以下截图中有些错误,例如hostname写成了Hostname,且最后一行没有空行。所以对于图片,各人仅仅参考就好;主要还是按照前述笔墨版代码中的格式,来修改自己的
PBS
脚本文件。
此外,我们再给出1个
PBS
脚本执行可执行文件的模板,具体如下。
#!/bin/bash
#PBS -N py_task
#PBS -q rtlab1_4
#PBS -l nodes=1:ppn=1
#PBS -l walltime=12:00:00
#PBS -o /data1/home/LiliAircas/Data_Reflectance_Rec/code/py_task.out
#PBS -e /data1/home/LiliAircas/Data_Reflectance_Rec/code/py_task.err
hostname
date "+%Y/%m/%d %H:%M:%S"
cd /data1/home/LiliAircas/Data_Reflectance_Rec/code
./Alignment_Server
date "+%Y/%m/%d %H:%M:%S"
复制代码
其中,脚本文件的寄义前面已经介绍过,这里我们就不再逐一介绍了。
在
Vim
中编辑完毕自己的脚本文件后,即可保存并退出
Vim
。起首,我们需要按下Esc键,退出编辑模式;随后,依次输入:wq这3个按键,即可保存并退出
VIm
。
随后,我们即可提交自己的
PBS
脚本文件到系统中;通过如下的代码即可实现这一功能。
qsub py_task.pbs
复制代码
上述代码会将我们前述编辑好的
PBS
脚本文件py_task.pbs提交到
PBS
作业调度系统中,并开始等待系统分配资源,从而执行作业。执行上述代码,如下图所示。
假如没有题目的话,会出如上图所示的一个编号;这个就是我们刚刚提交的任务的
ID
。
当然,有的时间执行上述代码,会出现如下图所示的错误,即qsub: submit error (Unauthorized Request...)字样的报错。
这种多数是因为将作业提交到了没有权限的队列中导致的;这种情况,需要和服务器的管理职员联系,从而获取权限。
接下来,再介绍几个
PBS
系统的常用命令。
起首,我们可以通过如下代码,获取当前超算的所有节点的情况。
pbsnodes
复制代码
执行上述代码,如下图所示;可以看到,不同节点的信息都列出来了。
还可以在上述命令的后面,加上具体节点的名称,从而只获取指定节点的信息;如以下代码。
pbsnodes cu02
复制代码
执行上述代码,如下图所示;其中,和上图一样,每一个当前正在
该节点
上运行的任务的
ID
,都会被显示出来,例如下图中紫色框内就是某个任务的
ID
。
其次,我们可以通过如下代码,获取当前队列中所有任务的情况。
qstat
复制代码
执行上述代码,如下图所示;可以看到有一个任务,这个任务是我自己提交的。在我这里,执行上述代码后只能看到自己提交的任务,而看不到队列中同时存在的、其他人提交的任务——感觉这个可能是我们学校服务器管理职员自行设置的,使得每一个用户仅仅只能看到自己账户中提交的任务。
再次,还可以通过如下的代码,检察队列中任务的详细信息。
qstat -f
复制代码
执行上述代码,如下图所示。
此外,可以通过qdel命令加上任务的
ID
,删除队列中的指定任务;例如以下代码。
qdel 1250752
复制代码
执行上述代码,并在执行前后通过qstat命令检察队列中的任务,可以看到指定的任务已经被删除了——但是有延迟:执行完qdel后立刻执行qstat的话,可以看到1250752这个任务还是在的;稍后再执行qstat,才可以看到1250752任务消失。
任务执行完毕后,我们就可以依次执行下面的2句代码,打开并检察作业的标准输出、错误输出文件。cat是一个常用的命令,用于毗连指定的文件,并打印它们的内容。
cat py_task.out
cat py_task.err
复制代码
执行上述代码,如下图所示。当然,我这里因为待执行的任务存有一些权限上的错误,所以在py_task.err文件中,给出了任务执行过程中的报错内容。
假如没有错误的话,那么各人就可以结合自己任务的实际情况,检察任务执行的结果文件了。
至此,大功告成。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
我爱普洱茶
金牌会员
这个人很懒什么都没写!
楼主热帖
事务
KAFKA EAGLE 监控MRS kafka之操作实践 ...
大数据揭秘丨疫情影响下亚马逊女性夹克 ...
初学Vue(全家桶)-第16天(vue-router ...
Java 中怎样将 bytes 转换为 long 类型 ...
信息系统安全运维整改参考
OpenHarmony轻量系统开发【1】初始Open ...
如何优雅的备份MySQL数据?看这篇文章 ...
Metasploit(msf)利用ms17_010(永恒 ...
Python教程:高级特性
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
人工智能
鸿蒙
快速回复
返回顶部
返回列表