我在我们的 ERP 系统中编写了一个函数,它通过简单地将日志“回显”到日志文件来将日志写入服务器上的文件。
echo "SOME LOGDATA" >> /users/erp/log/LOGMSG
每次用户触发特定事件时,都会调用 LOG 函数。
如果 2 个用户同时触发 LOG 事件会怎样?
“echo”是否负责文件锁定? 在我看来,必须由 linux 内核或 bash 负责,一个文件不是由 2 个命令行指令同时写入的。
我写了一个测试用例来强制这个条件(一秒内大约 1000 个 LOG 调用),看起来我的想法是正确的,但我不能确定,这些调用是在 bash 上同时执行的。
最佳答案
如解释here , 只有当写入的序列短于 PIPE_BUF
和 stdout 缓冲区的大小(很可能是 BUFSIZ
)中较小的一个时,echo 才保证是原子的。
对于较长的序列,你需要加锁。使用可以使用lockfile-create
和lockfile-check
。
关于linux - 使用 echo 从多个进程并行写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33887938/