2

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

因此,我设置了 incron 来监视我的放置文件夹,IN_CLOSE_WRITE以便在将文件写入其中时,然后在文件上运行相当资源密集型的脚本(图像,imagemagick)。这一切都很好;除非一次删除太多文件。正如我所说,该脚本是相当资源密集型的,如果同时运行超过 4 个左右的实例,我的开发机器就会瘫痪(最终的虚拟机会更强大,但我预见到可能会丢弃数百个文件的实例立刻!)

危险的 incrontab:

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

所以问题是:如何限制 incrond 产生的作业数量?我尝试使用 gnu 并行但无法弄清楚如何使其工作......

例如:

/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

关于如何处理这个问题的想法?

4

2 回答 2

2

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

/path/to/dropfolder IN_CLOSE_WRITE sem --gnu --id myjobname -j 4 /path/to/resourceintensivescript.sh $@/$#
于 2013-08-07T21:34:34.847 回答
2

一个非常基本的方法是简单地使用 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
于 2013-08-07T21:36:55.763 回答