我知道我可以使用一些工具,例如tail
和less
来查看不断增长的日志文件的最新添加内容。不过,我想做的是定期cron
对添加内容运行某种脚本(例如)。它应该能够处理无新添加、1 行或多行添加。
困难的部分是跟踪已经处理的内容,所以我只得到自上次检查以来的新内容。这应该最好考虑到滚动到新文件的日志。
有这方面的工具吗?
答案1
既然OP说
这应该最好记录滚动到新文件的帐户。
(注意“最好”),到目前为止没有其他答案,就我而言,没有涉及日志旋转,我认为这是“足够好”的解决方案,并且至少回答了问题标题。
我假设有一个名为 input.txt 的输入文件,并编写了一个脚本,该脚本仅输出自上次调用以来的新行,并将输入文件作为参数。在这里,我展示了(相当原始的)脚本及其工作原理。
[user@system test]$ ll
insgesamt 8
-rwxrwxr-x 1 user user 304 30. Jan 11:33 find-new-lines
-rw-rw-r-- 1 user user 6 30. Jan 10:42 input.txt
[user@system test]$ cat find-new-lines
#!/bin/bash
# We need last line count. Assume 0 on first run.
if [ ! -f "$1-last-lines-count.txt" ]; then
echo 0 > $1-last-lines-count.txt
fi
# Find current line count
wc -l $1 | cut -d' ' -f1 > $1-current-lines-count.txt
# Find number of new lines, if any
expr `cat $1-current-lines-count.txt` - `cat $1-last-lines-count.txt` > $1-new-lines-count.txt
# Save current line count for next call
mv -f $1-current-lines-count.txt $1-last-lines-count.txt
# Output only new lines, if any
tail -`cat $1-new-lines-count.txt` $1
[user@system test]$ cat input.txt
a
b
c
[user@system test]$ ./find-new-lines input.txt
a
b
c
[user@system test]$ ll
insgesamt 16
-rwxrwxr-x 1 user user 304 30. Jan 11:33 find-new-lines
-rw-rw-r-- 1 user user 6 30. Jan 10:42 input.txt
-rw-rw-r-- 1 user user 2 30. Jan 12:30 last-lines-count-input.txt
-rw-rw-r-- 1 user user 2 30. Jan 12:30 new-lines-count-input.txt
[user@system test]$ ./find-new-lines input.txt
[user@system test]$