专栏名称: 生信菜鸟团
生信菜鸟团荣誉归来,让所有想分析生物信息学数据的小伙伴找到归属,你值得拥有!
目录
相关文章推荐
生物学霸  ·  222 人,西湖大学公布 2025 ... ·  5 天前  
生物制品圈  ·  细胞培养基为什么要现配现用? ·  6 天前  
生信宝典  ·  微生物组-宏基因组分析专题研讨会 ... ·  5 天前  
51好读  ›  专栏  ›  生信菜鸟团

玩转服务器—从前台到后台,让你的任务无忧运行

生信菜鸟团  · 公众号  · 生物  · 2025-01-07 23:35

正文

滴水穿石 非一日之功


在生信分析的过程中,往往一个步骤会非常耗时,如果任务只是放在前台运行,那么不仅妨碍我们继续操作,还会因为网络波动造成任务意外中断,因此对于服务器的使用,我们还必须了解一下如何把任务提交到后台运行。在上一期我们介绍了并行提交任务(玩转服务器—提交并行任务),其中提到了一嘴,把任务放到后台,那么今天让我们来看看还有哪几种常见的实现方法:

nohup ... &

& :将任务提交到后台。

nohup :用于让一个任务忽略 SIGHUP 信号,从而防止任务在终端关闭时被终止。

##基本结构
nohup long_running_command &

#
# 重定向日志输出
nohup long_running_command > output.log 2>&1 &
nohup long_running_command 1>output.log 2>&1 &

注意:如果仅仅是在命令后面加上 & ,这样任务会在后台运行,不会阻塞当前的终端会话,但是此时任务是与终端关联的,如果终端关闭,任务就会被终止。所以通常我们需要搭配 nohup 使用

  • nohup 会将命令的标准输出和标准错误输出重定向到一个文件(默认为 nohup.out
  • > output.log:将标准输出重定向到 output.log 文件,用于自定义保存程序运行日志文件
  • 2>&1:将标准错误输出重定向到标准输出。
  • 12 是标准输出(stdout)和标准错误输出(stderr)的文件描述符。
    • 关于文件描述符
    • 0: 标准输入(stdin)
    • 1: 标准输出(stdout),表示命令的正常输出(通常是命令运行结果的文本或者运行日志)。
    • 2: 标准错误输出(stderr),表示命令的错误信息(比如,执行命令时出现的报错信息)

nohup示例

##新建命令执行的脚本文件
vim st1_umi_white.sh

#
#提交后台运行
nohup bash st1_umi_white.sh 1>st1_run.log 2>&1 &

nohup提交示例

screen

screen 允许你创建一个虚拟的终端会话,并在使用期间自由切换。即使你退出或关闭当前的 SSH 会话,任务仍然继续运行。

## 创建一个会话窗口
screen -R 
screen -S 

#
-R 和 -S 都可以创建新的会话窗口,但是建议你使用 -R 创建,因为它可以检查你要创建的窗口是否已经存在。避免重名。

#
# 退出会话
ctrl+a+d (快捷键)

#
# 重新进入(恢复)之前创建的会话窗口
screen -r 

#
# 关闭会话
screen -X -S  quit

#
 也可以在进入screen_name后 ,执行 exit


#
# 查看当前所有会话
screen -ls

screen示例

##创建虚拟会话
screen -R nowhite

#
#提交命令
time awk 'BEGIN { while (getline  0) { barcodes[barcode]++; } } } END { for (barcode in barcodes) { print barcode, barcodes[barcode]; } }' ../Drug96-1_L4_Q10182.R2.fastq >  barcode_allreads_R2.txt

terminal界面
screen虚拟会话页面

bg 和 fg

  • ctrl + z :可以将一个正在前台执行的命令放到后台,并且暂停
  • bg 命令用于将一个被暂停的进程(通常是通过 Ctrl + Z 暂停的进程)继续在后台运行。它是“后台”命令的缩写,可以让你在不中断任务的情况下将它移到后台继续执行。
  • disown 命令用于将一个或多个后台任务从 shell 的作业控制列表中移除。使用 disown 后,这些任务将与当前 shell 会话脱离关联,意味着任务将不再受到终端信号(如 SIGHUP,当终端关闭时)影响,任务将继续运行,即使你退出当前会话或关闭终端。
  • fg  将后台中的命令调至前台继续运行。

正在前台运行的任务放后台

如果你有一个在前台运行的耗时任务,并希望将其转移到后台,那么你可以:

  1. 使用 Ctrl + Z 暂停任务
  2. 使用 bg 命令,将任务移到后台继续运行
  3. 使用 disown 使任务与当前终端断开(可选)
  • 如果你计划要关闭终端,并且希望任务继续运行,不受终端退出的影响,那么可以执行 disown
  • 如果你会保持终端打开直到任务完成,则不需要使用 disown
前台运行任务
time awk 'BEGIN { while (getline  0) { barcodes[barcode]++; } } } END { for (barcode in barcodes) { print barcode, barcodes[barcode]; } }' ../Drug96-1_L4_Q10182.R1.fastq >  barcode_allreads_R1.txt

#
 按ctrl z 键,暂停命令
jobs 
# 查看后台进程,可以看到任务暂停
bg %1 
#把后台暂停的1号任务放到后台继续运行,这样就把前台任务放到了后台运行,返回了命令提示符,可以继续进行其他操作
bg示例
对比查询
bg执行前后top命令查询任务

R 脚本后台执行

如果你在使用Rstudio-server运行代码的时候,需要长时间运行,那么就需要写成R脚本,通过nohuo或者screen 提交到后台运行。具体可以参考:运行耗时比较长的代码就需要后台运行了

nohup Rscript myscript.R > output.txt &

提交后台的R脚本需要注意两点:

  • 确保你的R脚本在运行时不需要任何用户交互。否则,你的R脚本可能会在需要用户输入时停止运行。
  • 定义好传参参数。R 提供了 commandArgs() 函数来获取从命令行传递给 R 脚本的参数。你可以在 R 脚本中使用该函数来处理传递的参数。

R脚本提交示例

这里我们演示一个10x单细胞的读取:

# 加载必要的库
library(Seurat)

# 获取命令行传递的参数
args TRUE)

# 检查参数个数
if (length(args) != 2) {
  stop("请提供数据文件夹路径和输出文件路径。")
}

# 获取传递的参数
dir 1]  # 数据文件夹路径
output_file 2]  # 输出文件路径

# 获取所有样本的文件名
samples 
# 显示样本列表
cat("样本文件:", samples, "\n")

# 处理每个样本并创建 Seurat 对象
sceList function(pro) {
  cat("正在处理样本:", pro, "\n")
  
  # 读取数据
  tmp   cat("数据维度:", dim(tmp), "\n")
  
  if (length(tmp) == 2) {
    ct 1]]
  } else {
    ct   }
  
  cat("counts 维度:", dim(ct), "\n")
  
  # 创建 Seurat 对象
  sce                             project = gsub('GSM[0-9]*_''', pro),
                            min.cells = 5,
                            min.features = 300)
  
  return(sce)
})

# 合并所有 Seurat 对象
sce.all 1]], y = sceList[-1], add.cell.ids = samples)

# 显示 RNA 层次的名称
cat("RNA 层次名称:", names(sce.all@assays$RNA@layers), "\n")

# 显示 RNA counts 数据
cat("RNA counts 数据维度:", dim(sce.all[["RNA"]]$counts), "\n")

# 保存最终的 Seurat 对象到指定路径
save(sce.all, file = output_file)
cat("Seurat 对象已保存到:", output_file, "\n")

shell命令提交:

nohup Rscript read_10x.R GSE247844_RAW/ ./GSE24788.Rdata 1>read.log 2>&1 &
R脚本提交示例

在Rstudio-server代码编辑区编辑R脚本,在Terminal端可以直接提交后台运行

R脚本日志示例

如果你也需要共享服务器,详见:满足你生信分析计算需求的低价解决方案福利抢购方式

还等什么呢,赶快扫描下面二维码添加微信抢购吧!





文末友情宣传

强烈建议你推荐给身边的博士后以及年轻生物学PI,多一点数据认知,让他们的科研上一个台阶: