2017-03-12 14 views
0

RMAN startとRMAN Endの時間差を計算する必要があります。ログはこのbashで時差を計算する

-rw-r----- oracle/dba 2017-03-11 21:56:35 storage/backup/daily/ALG_PDB_2drut5jf.alg 
-rw-r----- oracle/dba 2017-03-11 21:56:34 storage/backup/daily/ALG_PDB_2erut5jf.alg 
-rw-r----- oracle/dba 2017-03-11 21:56:07 storage/backup/daily/ALG_PDB_2frut5jf.alg 
-rw-r----- oracle/dba 2017-03-11 21:56:29 storage/backup/daily/ALG_PDB_2grut5jv.alg 
-rw-r----- oracle/dba 2017-03-11 21:39:14 storage/backup/daily/BKPPDB_28rut42s.F_bkp 
-rw-r----- oracle/dba 2017-03-11 21:47:28 storage/backup/daily/BKPPDB_29rut42s.F_bkp 
-rw-r----- oracle/dba 2017-03-11 21:42:41 storage/backup/daily/BKPPDB_2arut42s.F_bkp 
-rw-r----- oracle/dba 2017-03-11 21:55:33 storage/backup/daily/BKPPDB_2brut4k8.F_bkp 
-rw-r----- oracle/dba 2017-03-11 21:55:36 storage/backup/daily/c-2819904582-20170311-00 
-rw-r----- oracle/dba 2017-03-11 21:56:42 storage/backup/daily/c-2819904582-20170311-01 
-rw-r----- oracle/dba 2017-03-11 21:56:41 storage/backup/daily/control_PDB_2hrut5kp.ctl 

のようなものです私は場合、スクリプトが動作すると(成功)スクリプト

#!/bin/bash -x 
if [ -f /storage/backup/weekly/DB-Backup-$(date -d "yesterday" '+%a-%d%m%y').tgz ] 
then 

export StartMin=$(tail -30 /storage/backup/weekly/DailyCompressionLog|grep "^-\|^ -" |sort -k5|awk '{print $5}' |awk -F ":" '{print $2}'|awk 'NR==1; END{print}'|awk 'FNR==1 {print $1}') 
export EndMin=$(tail -30 /storage/backup/weekly/DailyCompressionLog|grep "^-\|^ -" |sort -k5|awk '{print $5}' |awk -F ":" '{print $2}'|awk 'NR==1; END{print}'|awk 'FNR==2 {print $1}') 

export StartHour=$(tail -30 /storage/backup/weekly/DailyCompressionLog|grep "^-\|^ -" |sort -k5|awk '{print $5}' |awk -F ":" '{print $1}'|awk 'NR==1; END{print}'|awk 'FNR==1 {print $1}') 
export EndHour=$(tail -30 /storage/backup/weekly/DailyCompressionLog|grep "^-\|^ -" |sort -k5|awk '{print $5}' |awk -F ":" '{print $1}'|awk 'NR==1; END{print}'|awk 'FNR==2 {print $1}') 

echo "Backup for `date -d "yesterday" '+%a-%d%m%y'`" >> /storage/backup/weekly/MonthlyCompressionLog 
echo -e "RMAN Backup Started at $StartHour":"$StartMin" >> /storage/backup/weekly/MonthlyCompressionLog 
echo -e "RMAN Backup Ended at $EndHour":"$EndMin" >> /storage/backup/weekly/MonthlyCompressionLog 
echo -e "Time taken to Complete Backup Job Hours:Mins $((EndHour-StartHour))":"$((EndMin-StartMin))" >> /storage/backup/weekly/MonthlyCompressionLog 

echo -e "-------------------------------------------------------\n" >> /storage/backup/weekly/MonthlyCompressionLog 

ある

以下、最初の時間である第四列に基づいて列をソートするスクリプトを書きました終了時刻が開始時刻より大きい

スクリプトが失敗したとき

現在開始時間が終了時間よりも大きい場合は終了状態になります。この場合、終了時間はStartHourよりも大きくなります

シナリオ:: RMANが14:56に開始し15:02に完了したとします。この場合、開始から終了までは、ちょうど0:06分ですが、スクリプトは1が表示されます:-54

任意のアイデア....代わりに個別に時間と分を計算する

+0

あなたが上に投稿したテキストは、 'ls'の出力ですか? – codeforester

+0

はい、それは..... – OmiPenguin

答えて

1

は、開始と終了のための深夜0時からの分の数を計算しますそれを使用してアリスメントを実行します。

だから、のような何か:生産

StartNumMins=$(($StartHour * 60 + $StartMin)) 
EndNumMinutes=$(($EndHour * 60 + $EndMin)) 

MinutesDiff=$(($EndNumMinutes - $StartNumMins)) 

DiffHours="0$(($MinutesDiff/60))" 
DiffMins="0$(($MinutesDiff % 60))" 

echo "Diff is $MinutesDiff minutes, which is ${DiffHours:-2}:${DiffMins:-2}" 

:もちろん

Diff is 6 minutes, which is 00:06 

を、あなたのプロセスは真夜中を横切る場合、その後、あなたが考慮に開始/終了日を取る必要があるでしょう、ではありませんちょうど時代。 GNUの '日付'を利用できる場合(例えば、Convert an ISO date to seconds since epoch in linux bashを参照)など、いくつかのオプションがありますが、それは別の問題です。