日付、時刻、文字列を確認し、メールを実行するスクリプトを作成します。

日付、時刻、文字列を確認し、メールを実行するスクリプトを作成します。

スクリプトを生成する必要があります。ログファイルの最後の数行を取得し、開始日の最後の行に今日の日時17:00:xxが含まれており、その後に更新されたxxxxx行があることを確認したいと思います。そして提出して完了してください。スクリプトは、現在の日付と時刻(17)に「Row Completed」文字列が含まれていることを確認します。電子メールがトリガーされない場合。

以下はログファイルの形式です。

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

私が取ったアプローチは、ログから最後の3行を抽出し、その3行に今日のタイムスタンプが含まれていることを確認することでした。

#!/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 時に日付文字列を取得するために使用されます。指定された形式は日付を「2月2日土曜日17:00」として出力します。これはログファイルのタイムスタンプに基づいて取得できます。

おすすめ記事