限制由incrond产生的并发进程的数量

我正在开发一个最终将驻留在CentOS(最新)虚拟机上的进程,我正在开发Ubuntu 12.04 LTS …

所以,我有incron设置用IN_CLOSE_WRITE来监视我的drop文件夹,这样当一个文件被写入时,一个相当耗费资源的脚本就会在文件(Images,imagemagick)上运行。 这一切工作正常; 除非有太多的文件被立即删除。 正如我所说,脚本是相当资源密集型的,如果超过4个左右的实例同时运行,我的开发机器就会屈服(最终的虚拟机将变得更加强大,但是我预见到可能会丢失数百个文件的情况立刻!)

危险的incrontab:

 /path/to/dropfolder IN_CLOSE_WRITE bash /path/to/resourceintensivescript.sh $@/$# 

所以问题是:如何限制incrond产生的工作量? 我尝试使用牛羚并行,但无法弄清楚如何使这项工作…

例如:

 /path/to/dropfolder IN_CLOSE_WRITE parallel --gnu -j 4 bash /path/to/resourceintensivescript.sh $@/$# 

似乎什么都不做:/

和:

 /path/to/dropfolder IN_CLOSE_WRITE;IN_NO_LOOP bash /path/to/resourceintensivescript.sh $@/$# 

结束丢失的文件:P

如何处理这个想法?

这样做的一个非常基本的方法是简单地使用grep并计算进程…类似于:

  processName=myprocess if [ $(ps -ef |grep -v grep|grep ${processName} |wc -l) -le 4 ] then do something fi 

循环建议:

 processName=myprocess while true do if [ $(ps -ef |grep -v grep|grep ${processName} |wc -l) -le 4 ] then do something break fi sleep 5 done 

您可以使用并行的sem实用程序:

 /path/to/dropfolder IN_CLOSE_WRITE sem --gnu --id myjobname -j 4 /path/to/resourceintensivescript.sh $@/$#