使用 echo 从多个进程并行写入文件

Ale*_*sar 5 linux bash file-locking

我在我们的 ERP 系统中编写了一个函数,它通过简单地将日志“回显”到日志文件来将日志写入服务器上的文件。

echo "SOME LOGDATA" >> /users/erp/log/LOGMSG
Run Code Online (Sandbox Code Playgroud)

每次用户触发特定事件时,都会调用 LOG 函数。

如果 2 个用户完全同时触发 LOG 事件会发生什么?

“echo”是否负责文件锁定?在我看来,必须是 linux 内核或 bash 必须注意,文件不是由 2 个命令行指令同时写入的。

我写了一个测试用例来强制这种情况(一秒内大约有 1000 个 LOG 调用),似乎我的想法是正确的,但我不能确定,这些调用是在 bash 上同时执行的。

Cla*_*dio 5

正如这里所解释的,只有当写入的序列比PIPE_BUFstdout 缓冲区的较小者和大小(最有可能BUFSIZ)更短时,echo 才能保证是原子的。

对于更长的序列,您需要锁定。使用可以使用lockfile-createlockfile-check