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

标签 linux bash file-locking

我在我们的 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-createlockfile-check

关于linux - 使用 echo 从多个进程并行写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33887938/

相关文章:

bash - 为什么我必须输入 source env.sh 才能使用名为 Madagascar 的地球物理处理软件?

mysql - 将从站状态\G 显示到输出文件 '/tmp/slavestatus.txt' 中;

bash - 检查命令错误是否包含子字符串

windows - CopyFile 是否锁定源文件?

java - 当应用程序意外退出时处理文件锁定

java - 从运行在 linux websphere 上的 java 应用程序访问 Windows 目录

c - "Initializer element is not constant"在 Linux GCC 中无故出错,编译 C

c# - 读取另一个进程使用的文件

linux - QtCreator - 在交互式 bash 中启动外部工具

linux - uclinux - 与 libc.so.0 库的链接