linux 使用wget每5分钟下载一次日志文件并检测更改

eoxn13cs  于 2022-11-02  发布在  Linux
关注(0)|答案(1)|浏览(183)

我正在编写一个bash脚本来完成以下任务。
1.脚本每五分钟运行一次wget,以便从静态URL下载一个小日志。
1.脚本使用diff来查看日志文件中是否有任何新条目(新条目在日志文件的末尾生成)。
1.如果发现新的日志条目-将新条目提取到新文件中,正确格式化它们,向我发送警报,返回到#1。
1.如果没有找到新的日志条目,则返回到#1。

wget "https://url-to-logs.org" -O new_log
if diff -q new_log old_log; then
echo "no new log entries to send."
else
echo "new log entries found, sending alert."
diff -u new_log old_log > new_entries

# some logic i have to take the output of "new_entries", properly format the text and send the alert.

rm -rf old_log new_entries
cp new_log old_log
rm -rf new_log
fi

还有一件事--每晚午夜托管日志的服务器删除所有条目并显示一个空白文件,直到为新的一天生成新的日志条目。
我想我总是可以在午夜运行一个cron作业来运行“rm -rf”和“touch”old_log文件,但我很好奇是否存在更简单的方法来做到这一点。
提前感谢您的任何/所有意见和帮助。

lrl1mhuk

lrl1mhuk1#

If your logs are not rotating - i.e. the old log is guaranteed to be the prefix of the new log, you can just use tail to get the new suffix - something like this:

tail -n+$(( $(wc -l old_log) + 1 )) new_log > new_entries

If there are no new lines in new_log , the new_entries file will be empty, which you can check using stat or some other way.
If your logs are rotating, you should first use grep to check if the last line from the old log exists in the new log, and if not - assume the entire new log is new:

if ! egrep -q "^$(tail -n1 old_log)\$" new_log; then cat new_log > new_entries; fi

相关问题