首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么其他库存文件在到达其他库存文件的几秒钟后仍未被处理?使用"-cmin -5“作为条件

为什么其他库存文件在到达其他库存文件的几秒钟后仍未被处理?使用"-cmin -5“作为条件
EN

Stack Overflow用户
提问于 2020-09-22 12:23:49
回答 1查看 27关注 0票数 0

我有一个cronjob,它每隔1分钟运行一次,从远程服务器获取一个文件,然后将其放入我本地$INC_INVENT中。下面是示例文件,

代码语言:javascript
复制
  -rw-r--r-- 1 ansi ansi 46 Sep 21 22:34 inventory_200921223307
  -rw-r--r-- 1 ansi ansi 46 Sep 21 22:35 inventory_200921223406

然后我有一个脚本,将运行每5分钟执行一个剧本,下面是代码。它将首先检查是否有新文件,然后执行剧本

代码语言:javascript
复制
ls -1 $INC_INVENT | grep -v "process" | while read invent_file
do
   check=$( find $INC_INVENT -name $invent_file -cmin -5 )
   if [ ! -z $check ]
   then
       ansible-playbook -i $INC_INVENT/$invent_file  $MAIN/applyPatch.yml -vv >> $LOG/linuxpatching.log.$$ 2>&1
       mv  $INC_INVENT/$invent_file $PROCES
       exit
   else
      exit
   fi
done

问题是只有(inventory_200921223307)文件正在处理,其他文件(inventory_200921223406)不再由剧本处理。似乎不再符合“-cmin -5”的条件?我的目标是任何到达的新文件都将被处理,我添加了-cmin -5来避免再次处理库存文件,如果它还没有移动到进程目录,这是不是很糟糕的方法,或者有更好的方法来实现这一点?提前谢谢。

代码语言:javascript
复制
-rw-r--r-- 1 ansi ansi 46 Sep 21 22:34 inventory_200921223307
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-22 16:29:29

对我来说,这似乎是一个设计问题,比如,当第一个文件正在处理时,一段时间过去了,当您尝试检查队列中的下一个文件时,它已经过期了。

我会通过重写一些循环来修复它:

代码语言:javascript
复制
find . $INC_INVENT -cmin -5 | grep -v "process" | while read invent_file
do
       ansible-playbook -i $INC_INVENT/$invent_file  $MAIN/applyPatch.yml -vv >> $LOG/linuxpatching.log.$$ 2>&1
       mv $INC_INVENT/$invent_file $PROCES
done

以这种方式,您首先查询相关数据,然后简单地处理它,而不需要稍后在队列循环中检查它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64003059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档