Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux tail-f到多个文件,这些文件通过管道传输到";当读到;给出了意想不到的结果_Linux_Bash_Unix - Fatal编程技术网

Linux tail-f到多个文件,这些文件通过管道传输到";当读到;给出了意想不到的结果

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

我编写了一个快速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_*$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}”和;完成等待