Linux 试图通过cron作业在跟踪日志文件中遇到错误字符串时立即生成电子邮件警报
当此脚本从跟踪日志文件中读取错误字符串时,我需要生成电子邮件警报:Linux 试图通过cron作业在跟踪日志文件中遇到错误字符串时立即生成电子邮件警报,linux,bash,shell,unix,scripting,Linux,Bash,Shell,Unix,Scripting,当此脚本从跟踪日志文件中读取错误字符串时,我需要生成电子邮件警报: #!/bin/bash echo "Script is starting" logLocation="/apps/ca/share/scripts/moveTos3.log" echo $logLocation Email_Dest="abc@abc.com" echo $Email_Dest tail -f $logLocation|while read line;do echo $line if [ `echo $line
#!/bin/bash
echo "Script is starting"
logLocation="/apps/ca/share/scripts/moveTos3.log"
echo $logLocation
Email_Dest="abc@abc.com"
echo $Email_Dest
tail -f $logLocation|while read line;do
echo $line
if [ `echo $line|grep error` -ne 0 ];
then
mail -s "test3" $Email_Dest < echo $line;
fi
done
#/bin/bash
echo“脚本正在启动”
logLocation=“/apps/ca/share/scripts/moveTos3.log”
echo$logLocation
电子邮件地址=”abc@abc.com"
echo$Email\u Dest
tail-f$logLocation |在读取行时;做
回音$线
如果[`echo$line | grep error`-ne 0];
然后
邮件-s“test3”$Email\u Dest
到目前为止,我无法收到电子邮件。非常感谢您的帮助。您在此处发布的代码永远不会发送电子邮件 本
if
条款:
if [ `echo $line|grep error` -ne 0 ];
then
mail -s "test3" $Email_Dest < echo $line;
fi
所以这里要注意两件事:
如果
不接受条件,则接受命令列表[…]
! echo $line | grep error
即:
if ! $line | grep error;
then
mail -s "test3" $Email_Dest < echo $line;
fi
为什么代码>是什么?
命令列表的返回值是列表中最后一个命令的返回值
在这里的示例中,只有一个命令,!echo$line | grep错误
当命令是管道时,返回值是管道中最后一个命令的返回值,grep
如果找到某个命令,则返回0,如果没有,则返回1
但是我们需要相反的条件,所以我们预先设置了
到管道,它反转管道的返回值,因此如果grep
返回0,它将返回1,从而导致if
跳过then
子句
那么方括号是怎么回事?
在大多数情况下,您需要测试一个简单的条件,例如文件是否存在,或者变量X
是否大于10。由于shell只接受程序,因此有一个程序执行以下操作:
test-f/my/file
如果文件存在,则返回0;如果文件不存在,则返回1
test$X-gt 10
如果X
的值大于10,则返回0;如果不大于10,则返回1
您可以按如下方式使用它:
if test $X -gt 10; then
...
fi
但是人们想让贝壳变得漂亮。因此,他们创建了一个程序,/usr/bin/[
(是!),该程序具有以下语法:[]
,它直接执行测试
这允许您将if test$X-gt 10;然后…;fi
重写为if[$X-gt 10];然后…;fi
那么原始代码是做什么的呢?为什么它从不发送电子邮件?
现在您可以看到,原始代码首先执行echo$line | grep error
,它要么打印一行,其中包含单词“error”,要么不打印任何内容。然后它捕获此输出,并将其作为参数之一传递给[
如果查看[
(!!!)的手册页,您将看到语法[-ne]
或[-ne]
无效,如果运行它们,您将看到[
打印类似“语法错误”的内容并返回2
因为[
总是在原始代码中返回2,如果看到一个非零并跳过然后子句。用替换
替换echo$line | grep error`-ne 0`
替换grep-q error“$line”`
no未工作我的日志文件如下图所示Hanks但未工作我的日志文件如下图所示“欢迎使用sftp>put/some/file/dir/sample\u 13\u 26\u 02.csv上传/some/file/dir/sample\u 07\u 27\u 26\u 02.csv sftp>put/some/file/dir/sample\u 07\u 27\u 13\u 26\u 02.tag sftp>退出星期六11月16日18:10:18 UTC 2019删除文件/some/file/dir/07\u 27\u 13\u 26\u 02.csv星期六删除文件/some/file/dir/u 27\u标签“并且每5分钟跟踪一次作为cron计划,当此日志文件开始每5分钟跟踪/更新一次时,需要捕获grep错误字符串。您指的是两个作业-FTP和监视器。哪一个作业作为重复出现的5分钟cron执行?
if [ $(uname -s) = Linux ]; then
USE_GNU=true
else
USE_GNU=false
fi
...
if $USE_GNU; then
...
fi
if test $X -gt 10; then
...
fi