创建一个脚本来检查日期、时间和字符串并触发邮件

创建一个脚本来检查日期、时间和字符串并触发邮件

需要创建一个脚本,我想获取日志文件的最后几行,并检查开始日期的最后一行是否包含今天的日期和时间 17:00:xx,后面是更新的 xxxxx 行。并提交完成。该脚本将检查当前日期和时间 (17) 是否包含“行已完成”字符串。如果没有触发邮件。

以下是日志文件的格式。

Start Date, Tue Jan 28 17:00:01 +03 2019
23468 rows updated.
Commit complete. 
--------------------------------------------
Start Date, Tue Jan 28 21:00:01 +03 2019
13369 rows updated.
Commit complete. 
--------------------------------------------
Start Date, Tue Jan 29 17:00:01 +03 2019
33099 rows updated.
Commit complete.
--------------------------------------------
Start Date, Tue Jan 29 21:00:01 +03 2019
21970 rows updated.
Commit complete.

下面是我尝试过的代码:

TIME=$(date '+%H%M')

l=$(cat /Data/v3/currlog.txt | grep "rows updated." | wc -l)

if [ $l -eq 0 ] && [ $TIME -eq 1700 ] ; then
echo "Please check if the records are updated" |  mailx -S  "check the rejection script" [email protected]

fi

但上面的脚本并没有解决我的目的。

澄清我的需求:

假设日志文件(currlog.txt)今天更新如下:

Start Date, Sat Feb  2 05:00:01 +03 2019
2708722 rows updated.
Commit complete.

现在我需要如果我安排脚本在 6 运行。它应该检查行是否在 5 更新。如果没有,它应该触发邮件。

日志文件每天都会以相同的格式更新。

答案1

我采取的方法是从日志中提取最后三行,然后检查这三行中是否包含今天的时间戳。

#!/bin/bash

today_time=$(date -d 'today 5 PM' '+%a %b %e %H:%M')

if ! tail -n3 /Data/v3/currlog.txt | grep "$today_time" &> /dev/null ; then
        echo "Please check if the records are updated" |  mailx -S  "check the rejection script" [email protected]
fi

GNUdate命令用于获取当天下午 5 点的日期字符串。指定的格式将输出日期为“Sat Feb 2 17:00”,可以根据日志文件中的时间戳进行搜索。

答案2

使用以下命令检查,效果很好

 d=`date +"%d"`
 m=`date +"%b"`
y=`date +%Y`
awk -v d="$d" -v m="$m" -v y="$y" '$4 ==  m && $5 == d && $NF == y && $6 ~ /^17/ {x=NR+2}(NR<=x){print }' filename

相关内容