脚本无法在执行前一秒钟选择文件

时间:2015-03-27 17:28:19

标签: shell cron find

我有一个每15分钟运行一次的脚本(检查是否存在新文件并通过电子邮件发送)[00,15,30,45]

有时会在最后一秒将文件传输到此位置(HH:MM:59秒)

E.g。

让我们说文件修改后的时间戳是(16:14:59) 脚本下次运行是(16:15:00)

脚本无法选择该文件,因此绝不会通过电子邮件发送 部分代码:

check=`find . -mmin -15`

1 个答案:

答案 0 :(得分:1)

如果您安排脚本从16:15:00.0000000开始,它将无法以精确的纳秒开始和结束。同样,磁盘写入不是原子的,并且开始在16:14:59.9999999处写文件并不意味着它会在16:15:00之前完成并有一个时间戳。

在执行,初始化和调度所有操作系统进程以及完成所有磁盘读取之前,将花费数百或数千毫秒。完成此操作所需的确切时间是不可预测的。

这意味着您的某个作业可能会在16:15:00.13运行,而下一个作业会在16:30:01.22运行,留下第二个长距离,您可能会丢失文件。

而不是检查"在过去15分钟内修改"你应该检查自上次运行脚本以来修改过的"" (跟踪最后处理的文件名或修改日期),或者至少在16:15:00或之后修改,但严格地在16:30:00"之前修改。