【发布时间】:2013-10-22 14:31:17
【问题描述】:
我对 bash 脚本有疑问。 我有两个 cron 任务,它们从同一文件夹中获取一些文件以进行进一步处理。
ls -1h "targdir/*.json" | head -n ${LIMIT} > ${TMP_LIST_FILE}
while read REMOTE_FILE
do
mv $REMOTE_FILE $SCRDRL
done < "${TMP_LIST_FILE}"
rm -f "${TMP_LIST_FILE}"
但是随后两个脚本实例同时运行相同的文件被移动到 $SRCDRL,这对于实例不同。 问题是如何防止文件被不同的脚本移动?
统一更新: 也许我有点不清楚... 我有存储 json 文件的文件夹“targdir”。我有两个 cron 任务,它们从该目录中获取一些文件进行处理。例如,在 targdir 中存在 25 个文件,第一个 cron 任务应该获取前 10 个文件并将它们移动到 /tmp/task1,第二个 cron 任务应该获取接下来的 10 个文件并将它们移动到 /tmp/task2 等。 但现在前 10 个文件移动到 /tmp/task1 和 /tmp/task2。
【问题讨论】:
-
为什么你有两个任务从同一个目录获取文件?要么任务做完全相同的事情,而不是 1 应该做的事情,要么任务做不同的事情,但它是一种随机的,一个人将处理任何给定的文件,这是没有意义的。
-
这是某种负载平衡。在该 kan 之后处理文件的程序接受有限数量的文件。但是硬件允许运行两次..
-
一个文件只能移动一次。如果第一次调用将文件移动到
/tmp/task1,第二次将找不到它并且不会对其进行任何处理。因此,您将获得分布在/tmp/task1和/tmp/task2中的前 10 个文件,但每个文件只会出现一次。如果您需要/tmp/task1中的前 10 个和/tmp/task2中的后 10 个,则必须进行一些同步。 -
让两个
cron工作相互避开有意义吗?就像如果你有数字文件名,一个只会触摸匹配[0-4]*的文件,而另一个只会触摸匹配通配符[5-9]*的文件?