Linux tail-f到多个文件,这些文件通过管道传输到";当读到;给出了意想不到的结果
我编写了一个快速bash脚本来监视几个日志文件,并将它们的内容发送到最重要的聊天室。以下是脚本:Linux tail-f到多个文件,这些文件通过管道传输到";当读到;给出了意想不到的结果,linux,bash,unix,Linux,Bash,Unix,我编写了一个快速bash脚本来监视几个日志文件,并将它们的内容发送到最重要的聊天室。以下是脚本: #!/bin/bash # HOOKS hook1=...#Mattermost hook hook2=...#Mattermost hook hook3=...#Mattermost hook date=$1 year=$2 unbuffer tail -f -n0 /var/log/$year/hook1_*$date.log \ /var/log/$year/hook2_*$dat
#!/bin/bash
# HOOKS
hook1=...#Mattermost hook
hook2=...#Mattermost hook
hook3=...#Mattermost hook
date=$1
year=$2
unbuffer tail -f -n0 /var/log/$year/hook1_*$date.log \
/var/log/$year/hook2_*$date.log \
/var/log/$year/hook3_*$date.log | grep "ERROR" | while read -r msg
do
if [[ $msg = *"hook1"* ]]
then
hook=$hook1
elif [[ $msg = *"hook2"* ]]
then
hook=$hook2
else
hook=$hook3
fi
msg=$(echo "$msg" | sed -r "s/\"/\\\\\"/g")
curl -i -X POST --data-urlencode "payload={\"text\": \"$msg\"}" $hook
done
sed部分转义引号,以便将消息替换为curl
然而,在执行过程中出现了几个问题:
- 在我运行一次脚本之后,htop中似乎有两个进程
- 有时,消息不会按其出现的样子发送给Mattermost,而是成批发送
- 消息有时会被剪切,一些内容会丢失
grep——行缓冲的
可能有助于缓冲。我将编写一个函数hook\u curl\u msg()
,它从$1
读取一个hook,并为您的三个hook调用此函数<代码>用于${hook1}${hook2}${hook3}中的h;dohook_curl_msg“${h}”和;完成等待