我正在开发一个进程,最终将驻留在一个CentOS (最新的)虚拟机上,我正在Ubuntu12.04LTS中开发。
因此,我已经设置了IN_CLOSE_WRITE来监视我的drop文件夹,这样当一个文件被写入文件时,就会在文件上运行一个相当资源密集的脚本(图片,imagemagick)。这一切都很好,除非同时删除了太多的文件。正如我所说的,这个脚本相当耗费资源,如果有4个以上的实例同时运行,那么我的开发机器就会崩溃(最终的虚拟机将更加强大,但我预见到可能会同时丢弃数百个文件!)
危险的无头怪:
/path/to/dropfolder IN_CLOSE_WRITE bash /path/to/resourceintensivescript.sh $@/$#因此,问题是:如何限制因英伦而产生的就业数量?我试着用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
关于如何处理这件事的想法?
发布于 2013-08-07 21:36:55
一个非常基本的方法是简单地使用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-07 21:34:34
您可以使用并行的sem实用程序:
/path/to/dropfolder IN_CLOSE_WRITE sem --gnu --id myjobname -j 4 /path/to/resourceintensivescript.sh $@/$#https://stackoverflow.com/questions/18114010
复制相似问题