我有一个包含200条命令的列表/队列,需要在Linux服务器上的shell中运行这些命令.

我只想一次最多运行10个进程(从队列中).有些过程需要几秒钟才能完成,而其他过程则需要更长的时间.

当一个进程完成时,我希望下一个命令从队列中"弹出"并执行.

有人有解决这个问题的代码吗?

Further elaboration:

在某种队列中,有200件工作需要完成.我想一次最多完成10件工作.当一个线程完成一件工作时,它应该向队列询问下一件工作.如果队列中没有更多的工作,线程就会死亡.当所有的线程都死掉了,这意味着所有的工作都完成了.

我试图解决的实际问题是使用imapsync将200个邮箱从旧邮件服务器同步到新邮件服务器.有些用户的邮箱很大,需要很长时间才能同步,有些用户的邮箱很小,同步速度很快.

推荐答案

我想你可以使用make和make-j xx命令来实现这一点.

也许是这样一个makefile

all : usera userb userc....

usera:
       imapsync usera
userb:
       imapsync userb
....

make-j 10-f makefile

Ruby相关问答推荐

Regex:仅捕获Ruby中匹配的替代方案

如何在 Ruby 中反转数字的字节顺序

RSpec 中有没有一种方法可以同时断言调用次数和参数列表?

生成带有小写字母和数字的唯一随机字符串

是否应该在生产时缩小服务器代码?

Rspec:应该是(this or that)

如何判断 Capistrano 中是否存在文件(在远程服务器上)?

object_id 分配如何工作?

读取文件时如何避免 UTF-8 BOM

如何在 Ruby 中找到除法的余数?

Ruby RVM apt-get 更新错误

HAML 中 Javascript 中的 Ruby 方法

Ruby 删除目录

为什么表达式 (true == true == true) 会产生语法错误?

为什么这个 Ruby 对象同时具有 to_s 和 inspect 似乎做同样事情的方法?

Ruby on Rails switch

Ruby 实例变量何时设置?

Ruby 中的动态方法调用

严格将字符串转换为整数(或 nil)

Ruby:如何将数组数组连接成一个