我有10个以上的任务要执行,系统限制最多可以同时运行4个任务.
我的任务可以像:myprog taskname一样启动
如何编写bash shell脚本来运行这些任务.最重要的是,当一个任务完成时,脚本可以立即启动另一个任务,使运行任务计数始终保持为4.
Unix哲学家,
我在Perl中编写了一些工具,这些工具有一个可以并行运行的部分.我装备他们用-j像(工种)的选项make,并prove有因为这是明智的.但是,很快我就因为两个原因而对此感到不满.
--jobs=2,因为我有两个CPU核心,但我不应该需要告诉它可以通过自身找出计算机的信息.我进行了更多的修改以添加负载测量,产生额外的工作,同时仍然有"容量",直到达到负载阈值,这是当工作数保持或多或少不变时,但是在运行过程中的其他过程更高的优先级需要更多的CPU,随着时间的推移,产生的新工作量减少,因此工作量减少.
由于这种责任是在工具重复的代码,我下面的精神分解出来的调度方面成为一个独立的工具nice等..并行工具现在非常愚蠢,它们只有信号处理程序,通过它们可以增加或减少作业池,而负载测量和确定何时控制池的智能驻留在调度程序中.
尝试界面的味道(我也想提供合理的默认值,因此可以省略选项):
run-parallel-and-schedule-job-pool \
--cpu-load-threshold=90% \
--disk-load-threshold='300 KiB/s' \
--network-load-threshold='1.2 MiB/s' \
--increase-pool='/bin/kill -USR1 %PID' \
--decrease-pool='/bin/kill -USR2 %PID' \
-- \
parallel-something-master --MOAR-OPTIONS
Run Code Online (Sandbox Code Playgroud)
在我努力进入最后的90%之前,请告诉我,我是否复制了别人的工作?这个概念非常明显,所以它似乎应该已经完成了,但是我发现它不是一个单独的责任独立工具,只是作为更大的多用途系统管理员套件的深度集成部分.
奖金的问题:我已经知道runN和parallel.它们执行并行执行,但没有动态调度(niceload进入该区域,但非常原始).如果对我的期望独立的工具,还不存在,我是最好延长runN自己或提交一个愿望反对parallel?