如何在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的倍数。如果是的话,等任务完成,在运行后续的任务,不是的后直接运行下一个任务。

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

目录
相关文章
|
2天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
23 3
|
5天前
|
运维 监控 Shell
利用Shell脚本编写局域网监控软件:实时监测主机连接情况
本文介绍了如何使用Shell脚本创建一个局域网监控工具,以实时检查主机连接状态。脚本包括扫描IP地址范围检测主机可达性及使用`netstat`监控ESTABLISHED连接。此外,还展示了如何每60秒将连接数数据自动提交到指定网站API,以便实时跟踪网络活动。这个自动化监控系统有助于提升网络安全性和故障排查效率。
24 0
|
6天前
|
Shell
Shell脚本之流程控制语句
Shell脚本之流程控制语句
|
7天前
|
JSON 运维 监控
训练shell常用脚本练习(三)
【4月更文挑战第14天】shell代码训练(三)
23 1
|
11天前
|
存储 弹性计算 Shell
ecs服务器shell常用脚本练习(十)
【4月更文挑战第11天】shell代码训练(十)
142 0
|
11天前
|
弹性计算 Shell Go
ecs服务器shell常用脚本练习(九)
【4月更文挑战第10天】shell代码训练(八)
134 0
|
15天前
|
弹性计算 Shell Linux
ecs服务器shell常用脚本练习(六)
【4月更文挑战第4天】shell代码训练(六)
108 0
|
20天前
|
弹性计算 Shell 应用服务中间件
ecs服务器shell常用脚本练习(四)
【4月更文挑战第4天】shell代码训练(四)
96 0
|
22天前
|
Shell
【shell】实时查看网卡流量脚本
【shell】实时查看网卡流量脚本
|
22天前
|
Shell Linux
Linux的shell入门教程shell脚本入门教程
Linux的shell入门教程shell脚本入门教程
15 0