【问题标题】:Move only file contents and not any file handler/pointer仅移动文件内容而不移动任何文件处理程序/指针
【发布时间】:2013-09-12 11:40:05
【问题描述】:

我正在频繁地分析日志文件的数据并进行相应的处理。作为输入的日志文件是一个无限增长的文件。一个长时间运行的进程写入它,它属于 root 用户。

我拥有日志文件的所有文件权限。我想要做的是只移动文件内容直到那个点(获取文件内容并清除文件)而不干扰另一个进程。最好通过python脚本。

[编辑] (即)。,我需要从日志文件(主)中剪切并粘贴所有内容,直到那个时间点,然后将它们放入另一个(辅助)日志文件中。我将使用此辅助日志文件进行数据分析。同时,如果长时间运行的进程将任何内容写入主日志文件,它不应该丢失。如果我将新数据与其他内容一起带到辅助日志文件中,这不会有问题。

[编辑 2] 我面临的主要问题是从主日志文件中获取文件内容后清除它们。我需要确保在读取主日志并将它们写入辅助日志并从文件中删除这些内容时,写入文件的任何日志都不会丢失。

我查看了 TimedRotatingFileHandler 但在这方面对我没有帮助。还有其他建议吗?

谢谢

【问题讨论】:

  • 第二段能不能说清楚一点。
  • 我进行了更新以更好地解释 :-) 还有更多说明吗?
  • 为什么不将一个日志文件的输出通过管道传输到另一个日志文件。这是一个简单的linux命令。然后使用第二个日志文件进行任何进一步的处理。
  • 你的意思是取日志文件的内容?在这种情况下,我必须清除从主文件中获取的内容,以便它们将来不会用于数据分析。可以用shell脚本完成吗?

标签: python logging cron file-handling concurrentmodification


【解决方案1】:

Linux 尾文件的方式很简单。 记录过程开始后立即在您的日志文件上使用此命令:

  tail -f log_file_name.log >> /tmp/new_file_name.log &


[EDIT] tail -f log_file_name.log >> /tmp/new_file_name.log | tail -f /tmp/new_file_name.log | xargs -I TailOutput echo sed -i '/TailOutput/d' log_file_name.log

然后您可以使用这个 new_file_name.log 对这个新文件做任何您想做的事情。您的原始日志文件也完好无损。 我知道这有点扭曲,但这是我现在的想法!!!

【讨论】:

  • 但这不会从我的主日志文件中清除数据。这更像是使用 '''cat log_file_name.log > /tmp/new_file_name.log'''。我需要'''cat log_file_name.log > /tmp/new_file_name.log && cat /dev/null > log_file_name.log''' 之类的东西,除了在第一个 cat 命令之后写入的日志不会丢失。
  • 尽管它看起来很扭曲,但它对我有用 :-) 这才是最重要的 :-)
猜你喜欢
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 2010-11-04
  • 2013-12-30
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 2017-07-14
相关资源
最近更新 更多