【问题标题】:Is save for multiple bash scripts to append to the same log file?是否保存多个 bash 脚本以附加到同一个日志文件?
【发布时间】:2022-10-24 14:12:53
【问题描述】:

我想将多个 bash 脚本保存到同一个日志文件中,以便能够精确监控在另一个事件之前发生的事件。

只是为了创建一些测试,我几乎同时执行了三个 bash 脚本。

文件 A.sh:

#!/bin/bash
watch -n 1 'echo AAA $(date '+%Y%m%d%H%M%S%N') >> mylog.log'

文件 B.sh

#!/bin/bash
watch -n 1 'echo BBB $(date '+%Y%m%d%H%M%S%N') >> mylog.log'

文件 C.sh

#!/bin/bash
watch -n 1 'echo CCC $(date '+%Y%m%d%H%M%S%N') >> mylog.log'

在日志文件中我看到:

AAA 20220211083057445268276
BBB 20220211083058398227435
CCC 20220211083058417044373
AAA 20220211083058453956479
BBB 20220211083059419856946
CCC 20220211083059436848192

这一切看起来都很好。

如果两个 bash 脚本同时写入日志文件会发生什么?是否实现了一些文件锁定,所以 B.sh 必须等到 A.sh 写入日志文件,还是 B.sh 会覆盖 A.sh 记录?

【问题讨论】:

  • 日志条目可能交错。使用附加模式,覆盖应该是不可能的。
  • 您可以考虑使用记录到各种系统日志的logger 命令 - 请参阅man logger

标签: bash logging


【解决方案1】:

正如“rici”所说,如果您在打开并发访问时使用“附加”模式,这应该不是问题,但是结果可能不是您期望的顺序。为您的日志条目添加时间戳可能有助于解开它们。

并发访问还意味着进程必须在某个时间等待。我不希望等待很长时间,但这也取决于进程追加的频率。等待可能会给您带来更多问题,尤其是当并发访问尝试的数量增加时(大量进程或无限循环)。

我不是很精通,但你可能想看看 syslog 系统或类似的;它可能是一个替代选项,可能会消除并发文件处理/写入的一些特质(同时带来其他的;-))。

【讨论】:

    猜你喜欢
    • 2019-07-04
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多