如何记录“flag”文件的不同值

如何记录“flag”文件的不同值

我有一个黑匣子系统,它定期更新单行“标志”文件。这个单行文件在系统的生命周期中采用各种不同的值,对应于 FSM 的状态。

例如,“下载”、“验证”、“发布”等。在任何给定时间点,该值都是不同的,因此软件必须打开“标志”文件,截断它,并写入新的单行值。

我如何维护连续不同值的日志?我考虑过类似的方法tail -f,但能够记录不同的值,并保证在软件更新这些值时不会干扰文件系统。tail -f一段时间后,简单的方法会失败,并显示“文件被截断”。

答案1

您可能想要tail -F(注意它是大写的),如果失败,它将重试打开/读取文件。

man tail

   -f, --follow[={name|descriptor}]
          output appended data as the file grows; -f, --follow, 
          and --follow=descriptor are equivalent

   -F     same as --follow=name --retry

   --retry
          keep trying to open a file even when it is or becomes
          inaccessible; useful when following by name, i.e., with
          --follow=name

如果您的版本tail没有-F(相当于tail -f=name --retry),您可以使用inotify,然后等待close_write(inotifywaitinotify 工具):

file=foo

while inotifywait -qq -e close_write "$foo" >/dev/null; do
    cat "$foo"
done > log

tail -F如果可用的话应该是首选,因为使用时存在竞争条件inotifywait

相关内容