如何在shell脚本中控制任务投递

简介: 如果只有一个样本,或者样本量不大的情况下,我会选择一次性投递所有的任务。但是如果有100个以上的样本,那我就得谨慎考虑。用 snakemake 很好解决这个问题,它会按照你给定的任务数和CPU数,确定每次投递多少任务。

如果只有一个样本,或者样本量不大的情况下,我会选择一次性投递所有的任务。但是如果有100个以上的样本,那我就得谨慎考虑。

snakemake 很好解决这个问题,它会按照你给定的任务数和CPU数,确定每次投递多少任务。但是,有些时候任务比较简单,比如说gzip压缩,我就不想写一个snakemake脚本,就想用shell完成。

解决这个问题的关键命令是wait, 它的作用是等待当前的任务完成,和条件语句进行搭配的话,就能够实现每次只运行一定量的任务。举个例子, 我想用gzip对这些文件进行压缩

许多fastq文件

直接用下面的命令,可能会影响到其他用户

ls *.fastq | while read fastq ; do echo "gzip $fastq &"; done

这里没有实际运行,只是用echo来示意。

而比较合适的做法是下面这种

#!/bin/bash

count=0

ls *.fastq | while read fastq 
do
    gzip $fastq &
    count=$((count+1))
    if [ $((count % 4 )) -eq 0 ];
    then
        wait
        count=0
    fi
done

每次循环时,会把任务会放入后台,之后检查当前的计数是不是4的倍数。如果是的话,等任务完成,在运行后续的任务,不是的后直接运行下一个任务。

这个小技巧要感谢 李广伟师兄。

目录
相关文章
|
16天前
|
Shell
Shell脚本有哪些基本语法?
【9月更文挑战第4天】
37 17
|
16天前
|
存储 Unix Shell
shell脚本编程基础
【9月更文挑战第4天】
32 12
|
15天前
|
网络协议 关系型数据库 MySQL
Shell 脚本案例
Shell 脚本案例
28 8
|
15天前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
|
20天前
|
运维 监控 Shell
自动化运维之宝:编写高效的Shell脚本
【8月更文挑战第31天】在运维的世界里,Shell脚本是一把瑞士军刀,它让日常任务变得简单而高效。本文将通过浅显易懂的语言和实际案例,带你领略Shell脚本的魅力,并教你如何打造属于自己的自动化工具箱。无论你是初学者还是资深运维,这篇文章都将为你打开一扇窗,让你看到不一样的风景。让我们一起探索Shell脚本的世界吧!
|
28天前
|
存储 Shell 数据安全/隐私保护
minio一键安装脚本分享(shell和python)
minio一键安装脚本分享(shell和python)
40 0
|
28天前
|
关系型数据库 Shell 数据库
postgres14一键安装脚本分享(shell和python)
postgres14一键安装脚本分享(shell和python)
21 0
|
28天前
|
监控 Shell Linux
在Linux中,如何使用shell脚本检测磁盘使用率?
在Linux中,如何使用shell脚本检测磁盘使用率?
|
28天前
|
Shell Linux 开发工具
在Linux中,如何编写shell脚本将当前目录下大于10K的文件转移到/tmp目录下?
在Linux中,如何编写shell脚本将当前目录下大于10K的文件转移到/tmp目录下?
|
29天前
|
Unix Shell Linux
在Linux中,什么是Shell脚本,并且如何编写它。
在Linux中,什么是Shell脚本,并且如何编写它。