美文网首页Linux小推车Shell程序编写生信技巧
如何在shell脚本中控制任务投递

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

作者: xuzhougeng | 来源:发表于2019-04-25 16:18 被阅读28次

    如果只有一个样本,或者样本量不大的情况下,我会选择一次性投递所有的任务。但是如果有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的倍数。如果是的话,等任务完成,在运行后续的任务,不是的后直接运行下一个任务。

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

    相关文章

      网友评论

        本文标题:如何在shell脚本中控制任务投递

        本文链接:https://www.haomeiwen.com/subject/pcyzgqtx.html