我的 crontab 工作有一个奇怪的问题。我的 crontab 作业执行以下操作:
program > file
然而有时文件会充满我无法解释的随机数据。
我想知道是否可能是之前的 crontab 作业需要更长的时间来运行,并且它以某种方式将其结果混合在file
与当前的 crontab 作业?
总的来说,我的问题是:是>
原子操作?意思是如果两个程序都这样做> file
,那么最后一个完成的数据将包含在file
?
不,它不是原子的。连一点点原子性都没有。
重定向做了两件事:
它打开文件by name,如果需要的话创建它。
它会截断文件。
之后,该实用程序启动,其stdin
分配给打开的文件。
如果两个脚本或多或少同时执行此操作,它们最终都会写入相同的文件,但由于它们将具有独立的文件描述符,因此每个进程都会覆盖另一个进程的输出,从而导致字节的大交错,某些来自一个过程,一些来自另一个过程。
另一个常见的竞争条件与文件在实用程序开始执行之前被截断(由 shell)有关。因此,即使实用程序仅向文件写入一行,读取该文件的并发实用程序也可能会发现它是空的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)