Linux 文件夹实时或定时监控时文件未写入完成问题 时间: 2020-12-23 14:30 分类: Shell ####问题 有时候我们需要实时或定时地去监控某个文件夹下的文件,我这里的需求是定时检测某个文件夹下的文件,然后对检测到的文件做一系列的处理后再删除。 那么就有两个问题了: 1. 文件处理时间太长,下一次扫描时上一次的文件还没有处理完并删除,那么就会出现重复处理的问题。 2. 扫描出来的文件可能有些还在写入过程中,比如文件较大,使用`cp`命令拷贝到文件夹中,就可能出现`ls`命令虽然能扫描出文件,但实际上它还在写入中,如果此时就对文件进行处理,明显是会出问题的。 ####解决思路 第一个问题好解决,添加一个脚本执行的锁即可,即标记一下脚本正在执行,在脚本执行完的时候清除标记。 第二个问题,如果是实时监控文件的话,可能会想到去找有没有相关的事件通知,因为所有的实时监控都是基于事件通知来实现的,由于我这里做的是定时检测,所以此方法并不太适用。 换个角度思考,其实判断文件是否写入完成还是挺简单的,如果文件是实时写入,而不是预先分配空间,那么我们只需要比较文件大小即可解决。 但是,如果文件是预先分配空间,那么两次获取文件大小信息时是不变的,此时我们就只能通过文件修改时间来判断。 ####结束语 以上只是简单的解决办法,不需要去了解文件的一些事件通知,理论上不会出现什么问题,对于我个人的需求来说已经够用。 标签: 无