ruby读取仅从文件更新最新的行

时间:2017-04-25 15:33:03

标签: ruby

有一个脚本可以将输出更新到文件,并计划设置对该进程的监视并将最新的输出信息发送到中央服务器。

例如,监视脚本将查找每分钟的输出文件,并且只读取输出文件上更新的最新数据并将其发送到中央服务器。意味着它应该读取已经读过的旧数据。有没有办法通过ruby version >= 1.8.7

实现这一目标

这是我的方案,

脚本test.sh正在运行,它将输出写入名为/tmp/script_output.txt

的文件

我有另一个监视脚本jobmonitor.rb,它由test.sh触发,用于监视作业状态并将信息发送到中央服务器。现在它读取script_output.txt文件的全部内容并发送详细信息,并且必须每2分钟发送一次信息以进行实时监控。

有些情况下,输出文件script_output.txt将有超过500行,因此每2分钟监控脚本发送包含2分钟旧内容的整个内容。

因此,我正在寻找仅使用更新内容每2分钟读取输出文件内容的方法。

例如:

目前script_output.txt文件包含内容

line1
line2
.
.
.
line10

并且监视脚本发送了这些信息。

2分钟后,输出文件的内容低于

line1
line2
.
.
.
line10
line11
.
.
.
line 20

现在监控脚本捕获所有20行并发送信息,而我只需要从line11-20发送输出内容。

更新

我在下面试过,

open(filepath, 'r') do |f|
  while true
    puts "#{f.readline()}"
    sleep 60
  end
end

它仅读取一行,但我想读取在120秒或从上一次读取的下一行到现在更新的n行数。

注意:我在https://stackoverflow.com/questions/43446881/ruby-read-lines-from-file-only-latest-updates已经提出了这个问题,但我最初错过了更新详细信息,因此问题已经结束。对不起。

0 个答案:

没有答案