远程主机中的 grep 日志文件

远程主机中的 grep 日志文件

我正在尝试在远程主机的日志文件中查找字符串。但我无法将回显返回到运行脚本的主机。

#!/bin/bash
#dt=$(date +"%Y%m%d")
#HHMM=$(date '+%H:%M')
key="keys/cash_prod_key"



if
        ssh -o StrictHostKeyChecking=no -qni $key user@host "cat /var/log/FILE_send.log | grep FILENAME | grep -i success"\;
then
        echo "Success"
fi

我认为这不是最正确的方法。

答案1

问题是主机名不正确

这个答案的重点是如何以更好的方式编写代码。

您不需要在远程主机上运行完整的管道。在命令行上运行复杂的命令ssh很容易出错,尤其是从引用的角度来看。

反而:

#!/bin/bash

key="keys/cash_prod_key"

ssh_args=( -o StrictHostKeyChecking=no -qni "$key" user@host )

if ssh "${ssh_args[@]}" cat /var/log/FILE_send.log |
   grep -F 'FILENAME' |
   grep -q -i -F 'success'
then
    echo 'Success'
fi

这将仅cat在远程主机上运行,​​然后grep在本地运行这两个命令。

我还将-F标志添加到grep命令中,假设用作模式的字符串是不是正则表达式,但您要搜索的文字字符串。最后的grep用途-q,因为我们实际上并不感兴趣看到输出,只是看它是否包含字符串success

为了更容易阅读,我将使用的参数放入ssh一个数组中,以便稍后在调用中使用,并且我还通过在管道符号后插入换行符来使行稍微短一些。该脚本在语法上仍然是正确的。另请注意,变量等的任何扩展都应始终用双引号引起来,除非您知道在什么上下文中这不是必需的

请注意,我假设该ssh命令是以正确的方式调用的。

相关内容