我有一个构建脚本,其运行速度非常慢,特别是在Solaris上。我想通过在多个作业中运行它来提高其性能。我怎样才能做到这一点?如何在少数作业中运行shell脚本
3
A
回答
6
尝试GNU Parallel,这是很容易使用:
GNU平行的是使用一个或多个计算机上并行执行工作shell工具。作业可以是单个命令或小脚本,必须针对输入中的每一行运行。典型的输入是文件列表,主机列表,用户列表,URL列表或者表格列表。作业也可以是从管道读取的命令。然后,GNU并行可以分割输入并将其并行传输到命令中。
如果你今天使用xargs和tee,你会发现GNU parallel很容易使用,因为GNU parallel被写成和xargs具有相同的选项。如果你在shell中编写循环,你会发现GNU parallel可以替换大多数循环,并且通过并行运行多个作业使其运行得更快。
GNU并行可确保命令的输出与您在顺序运行命令时所获得的输出相同。这使得可以使用GNU parallel的输出作为其他程序的输入。
对于输入的每一行,GNU并行将执行命令,将该行作为参数。如果没有给出命令,则执行输入行。多条生产线将并行运行。通常可以使用GNU并行来代替xargs或cat |庆典。
你提到的是一个构建脚本。如果您正在使用命令行实用程序make
可以并行使用构建make's -j<N>
option:
GNU化妆知道如何同时执行多个配方。通常,make会一次只执行一个配方,在执行下一个之前等待它完成。然而,'-j'或'--jobs'选项告诉make同时执行许多配方。
另外,有distcc
可与make
用于分发编译到多个主机:
export DISTCC_POTENTIAL_HOSTS='localhost red green blue'
cd ~/work/myproject;
make -j8 CC=distcc
2
GNU平行是相当不错的。 @Maxim - 好建议+1。
对于其中一种情况,如果您无法安装新软件,请尝试使用此命令来执行需要多次运行的慢速命令,运行慢命令17次。更改内容以适合您的需求:
#!/bin/bash
cnt=0
while [ $cnt -le 17 ] # loop 17 times
do
slow_command &
cnt=$(($cnt + 1))
[ $(($cnt % 5)) -eq 0 ] && wait # 5 jobs at a time in parallel
done
wait # you will have 2 jobs you di not wait for in the loop 17 % 5 == 2
相关问题
- 1. 如何通过cron作业来运行一个shell脚本
- 2. 如何在PHP中运行shell脚本?
- 3. 在cron作业中运行脚本
- 4. 如何从cron运行的Perl脚本中运行shell脚本?
- 5. shell脚本不从cron作业执行
- 6. Oozie shell脚本作业
- 7. 运行shell脚本
- 8. 运行shell脚本++
- 9. 运行shell脚本
- 10. sqoop作业shell脚本在oozie中并行执行
- 11. 如何控制shell脚本中后台作业的数量
- 12. 运行在shell脚本
- 13. 在shell脚本中运行shell脚本 - 好还是不好?
- 14. 如何在shell脚本中创建作业?
- 15. 如何通过shell脚本在jenkins作业中设置条件
- 16. 如何在运行时期望shell脚本中传递参数
- 17. 如何在Groovy中使用参数运行shell脚本
- 18. 如何从shell运行python脚本
- 19. 如何通过运行shell脚本
- 20. 如何从magento运行bash shell脚本?
- 21. 如何使用Spotlight运行shell脚本?
- 22. 如何从xCode中的shell脚本文件运行脚本?
- 23. 将easy_install作为shell脚本运行
- 24. 运行shell脚本oozie动作
- 25. cron作业:如果如预期,如果shell脚本由cron作业运行/其他条件不工作
- 26. C++:在linux shell脚本中运行gdb
- 27. 无法在Xcode中运行shell脚本
- 28. 在PHP中运行交互Shell脚本
- 29. 在Azure中运行Power Shell脚本
- 30. 在Jenkins DSL中运行shell脚本mavenJob
如果您可以运行上面的BASH脚本,也可以运行GNU并行。请参阅“最小安装”下的内容:http://git.savannah.gnu.org/cgit/parallel.git/tree/README?id=edac400fdf6c997967c6ba9332eb493b8aaddba8 – 2013-02-08 15:02:50