使用bash和常用工具为Linux构建最小任务队列系统的最佳/最简单方法是什么?
我有一个9'000行的文件,每行有一个bash命令行,命令是完全独立的.
command 1 > Logs/1.log command 2 > Logs/2.log command 3 > Logs/3.log ...
我的盒子有多个核心,我想同时执行X任务.我在网上搜索了一个很好的方法来做到这一点.显然,很多人都有这个问题,但到目前为止还没有人有一个好的解决方案.
如果解决方案具有以下功能,那将是很好的:
可以解释多个命令(例如command; command
)
可以解释行上的流重定向(例如ls > /tmp/ls.txt
)
仅使用常见的Linux工具
如果它适用于其他Unix克隆而没有太多异国情调的要求,则可获得奖励积分.
你可以将命令列表转换为Makefile吗?如果是这样,你可以运行"make -j X".
GNU Parallel http://www.gnu.org/software/parallel/是一种比PPSS更加通用的并行化工具.
如果runfile包含:
command 1 > Logs/1.log command 2 > Logs/2.log command 3 > Logs/3.log
你可以做:
cat runfile | parallel -j+0
每个CPU核心运行一个命令.
如果您的命令如上所述,您甚至不需要运行文件,但可以执行以下操作:
seq 1 3 | parallel -j+0 'command {} > Logs/{}.log'
如果有更多计算机可用于处理,您可能需要查看GNU Parallel的--sshlogin和--trc选项.