qsub使用简介

qsub使用简介(小白学习篇)

参考:

CC敲代码的日常:https://mp.weixin.qq.com/s/UoJE5vBnrzPNomLeIvJIeQ
生信骚操作:https://mp.weixin.qq.com/s/gO–Yv9ZakXGaCCqMksUVA
基本上qsub使用你看上面两个就好了,这里是小白式学习记录(纯电脑小白那种)。

前言:

首先我是一个什么都不会的qsub小白,本文所有的测试命令都是从0开始学习,希望你能在看完本篇qsub使用命令简介后也能学会他,也希望qsub老手们能提出更好的建议!”
在学校服务器里或者外面租的服务器里面总是要使用到qsub来提交任务,一般是老师、师兄师姐或者同事告诉你不要直接在服务器终端跑大型命令,也不要在根目录下或者主目录下跑命令。他们告诉你要用qsub或者nohup(nohup 也是一种挂在后台的方法,但是和qsub有所不同)。这时候去百度qsub的时候发现一头雾水,什么SGE集群,一堆没详细中文解释的参数(反正我是看不懂,反而觉得他们写的太简洁了)。就是一个提交命令而已,反而弄的很复杂,我们就从头开始学习吧!

正式开始:

  1. 终端输入qsub
    在这里插入图片描述
    什么都没有,ctrl + C 终止后提示你读不到脚本,标准输入里面没东西。
  2. 写一个测试脚本,跑跑看
# qsub-learn.sh
echo "hello world"
# test
qsub qsub-learn.sh

在这里插入图片描述
提示任务上交了,但是等了半天没反应啊?终端也没有hello world输出。
这时候可以用qstat来看命令运行情况,但由于代码太过简单,自然你还没看到就跑完了。

原因是qsub的默认输出环境为 主目录,去主目录看看。
# 去主目录
cd ~
# 按时间顺序排序来看
ll -t

在这里插入图片描述
没错,你发现有两个文件在主目录产生了(这是一个不好的习惯,主目录应该保持干净)
聪明的你肯定已经猜到了,没错,我的“hello world”到qsub-learn.sh.o248593这个文件里面了
在这里插入图片描述
那这个file.e248593是什么?
你可以用man qsub 来看到这个文件代表什么(如果你英语强的话你直接看这个就好啦)

man qsub

在这里插入图片描述就是 任务的标准错误流, 如果报错了报错信息就会出现在这里面。
同理,file.o123456 代表任务的标准输出流。
在这里插入图片描述
3. 再写一个脚本测试

# test.sh
echo "test right here" > qsub_rlt.txt
# 修改 qsub-learn.sh
echo "hello world"
bash test.sh
# 运行命令
qsub qsub-learn.sh

发现主目录又产生了两个文件
在这里插入图片描述
打开看看
在这里插入图片描述
错误信息有了,一个看不懂的错误。
输出内容怎么还多了1个0? 而且 qsub_rlt.txt 没有?
一一来解释:
错误信息是因为test.sh 是一个命令,对,奇怪是吧。但是就是有。你可以用which看到确实有一个这个文件。
输出信息有0是因为第二行的bash test.sh 失败了,返回了一个0。
那我修改一下test.sh的名字

# mytest.sh
echo "test right here" > qsub_rlt.txt
# 修改 qsub-learn.sh
echo "hello world"
bash mytest.sh
# 运行命令
qsub qsub-learn.sh

主目录两个文件
在这里插入图片描述
没找到文件?mytest.sh 明明就在我的提交目录里面啊,下面标准输出倒是对的。
好吧,我就不说那么多废话了,我打字打的都累了,现在开始直接一点好吧,我又不是在写书(手动滑稽)。

原因:说了默认主目录,主目录里面没有.sh你说找的到吗?
解决:-cwd
1. 当前目录下执行 -cwd

qsub -cwd qsub-learn.sh

在这里插入图片描述
有的qsub没有-cwd这个参数,输入后会显示:
在这里插入图片描述
目前我不知道问题所在,可能是版本原因还是其他原因。
我在不同服务器使用qsub,使用方式不一样。
比如这里我们去看 man qsub 说明书,发现定义工作目录的命令-d :
这里定义工作路径,如果没有定义的话,就默认为主目录。
在这里插入图片描述

qsub -d ./ qsub-learn.sh

在这里插入图片描述

成功了!

使用-cwd或者-d ./ 这样我们就不用每次输入麻烦的绝对路径了。

下面我们再来加上一点点细节

cat qsub-learn.sh
#! /usr/bin/bash -e
echo "hello world"
bash mytest.sh
bash youli.sh
echo "yes"

qsub -d ./ -q fat -N kirito -l nodes=1:ppn=4 -V -j oe qsub-learn.sh

这里注意我们将上传的.sh文件添加了首行,-e参数代表如果命令在执行过程中有一个出错了,就停止,这里我们没有youli.sh,所以不会输出yes到标准流。
-q:指定投递队列
-N: 指定作业任务的名称
-l: 一些任务的指定参数
-V :将用户提交节点的环境变量导到计算节点上,一般都加上
-j:将错误流和输出流合并在一个文件

嫌麻烦,直接写在文件里面(-d换成-cwd同理)

cat qsub-learn.sh
#! /usr/bin/bash -e
#PBS -N learn
#PBS -l nodes=1:ppn=4
#PBS -j oe
#PBS -V
#PBS -d ./
#PBS -q fat
#
echo "hello world"
bash mytest.sh
bash youli.sh
echo "yes"

详细用法请直接 man qsub 学习(不过都是英文)
生信的基本用法参考我这些应该没太大问题了。(反正我是这样用的)
在这里插入图片描述

后续会陆续更新新用法。
最后转载一下常用命令:
批量提交pbs文件也可以看这个推文,写的真好:

命令 功能 使用说明 示例
qsub | 提交作业 | qsub [script] | $ qsub job.pbs
qdel | 删除作业 | qdel [job_id] | $ qdel 12345
qhold | 挂起作业 | qhold [job_id] | $ qhold 12345
qrls | 释放作业 | qrls [job_id] | $ qrls 12345

qstat -q 列出所有队列
qstat -a 列出所有作业
qstat -u user_id 列出user_id的所有作业
qstat -r 列出所有正在运行的作业
qstat -f job_id 列出作业job_id的信息
qstat -fQ queue 列出队列queue的信息
qstat -B 列出所有作业状态的汇总
pbsnodes 列出所有节点的详细信息
pestat 列出所有节点的状态

  • 25
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值