我有一个 cron 工作,每天都会启动一个新流程。该过程每 5 分钟运行一次并附加到日志文件中。
另一个 cron 作业每 60 分钟运行一次。它需要日志文件中的一些数据,清理它,创建一个新的日志文件。这个清理过的日志文件被导入到数据库中。MySQL 防止重复条目,因此每个新的干净日志文件的前几行都会被忽略。
在一天结束时,我被 24 个清理过的日志文件和一个原始日志文件困住了。
如果我首先将文件重命名为预处理来运行清理脚本,做我需要做的事情,然后删除它,这是否会导致我的第一个 cron 脚本出现任何问题,该脚本每 5 次记录到同一个文件分钟?
我担心的是原始日志文件正在写入,而另一个 cron 任务正在尝试重命名它。
操作系统:Debian 8
编辑:有趣。Cron 将写入重命名的文件。
没有文件锁定机制来保护文件重命名或删除,因为不需要它。在另一个进程打开文件时重命名甚至删除它是无害的,即使它主动写入和/或读取数据也是无害的。
打开文件的进程不会看到任何区别,并且会透明地访问重命名文件的原始数据,甚至访问“已删除”的文件也不会注意到文件已被删除。实际删除只会在该进程退出时发生。