我有一个cronjob,它每隔1分钟运行一次,从远程服务器获取一个文件,然后将其放入我本地$INC_INVENT中。下面是示例文件,
-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分钟执行一个剧本,下面是代码。它将首先检查是否有新文件,然后执行剧本
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来避免再次处理库存文件,如果它还没有移动到进程目录,这是不是很糟糕的方法,或者有更好的方法来实现这一点?提前谢谢。
-rw-r--r-- 1 ansi ansi 46 Sep 21 22:34 inventory_200921223307发布于 2020-09-22 16:29:29
对我来说,这似乎是一个设计问题,比如,当第一个文件正在处理时,一段时间过去了,当您尝试检查队列中的下一个文件时,它已经过期了。
我会通过重写一些循环来修复它:
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以这种方式,您首先查询相关数据,然后简单地处理它,而不需要稍后在队列循环中检查它
https://stackoverflow.com/questions/64003059
复制相似问题