我想在日志文件中测量两个作业之间的时间

我想在日志文件中测量两个作业之间的时间

我有一个日志文件,其名称/目录是:/srv/uni/kani/LogDay.09-03-2016 日志文件的名称每天都会更改日期。所以明天将是:“LogDay.10-03-2016”等等......

我希望帮助创建一个脚本来查看该文件并找到这一行:

08-03-2016 19:00:01 b5121 DISPLAY ID(IP[RANDOMIPADRESS] PID[22003]) MSG[BEGIN JOB /srv/uni/PROD/PNRUN/PN4949D

并测量该作业写入日志的时间(以分钟为单位):

08-03-2016 19:19:17 b7285 DISPLAY ID(IP[RANDOMIPADRESS] JOB[FO1008] PID[28085]) MSG[END JOB /srv/uni/PROD/PNRUN/FO1008D, , 27392]

日志中有很多其他行..其他作业说开始作业和结束作业等等。但我想测量这两个特定的时间之间的时间。

我想在晚上结束时使用这个脚本来查看所有工作总共花了多长时间。而不必进入日志并手动计数......

我想把它放在 bash 脚本中:)

我希望输出是这样的。今晚的工作总共花了X小时X分钟。

有人能帮我吗?

答案1

 #!/bin/bash
    
    myDate=$(date +'%d-%m-%Y')
    logPath='/srv/uni/kani/catalog/'
    BEGINJOB="PN4949D" # Can set to $1 to accept as 1st arg
    ENDJOB="FO1008D" # Can set to $2 to accept as 2nd arg
    regexFirst="$myDate.*BEGIN JOB /srv/uni/PROD/PNRUN/$BEGINJOB"
    regexLast="$myDate.*END JOB /srv/uni/PROD/PNRUN/$ENDJOB"
    # Find First time 
    FIRST=$(sed -n "/$regexFirst/p" $logPathLogDay.$myDate  | head -1)
    FIRST=$(echo $FIRST | sed -n 's/.*\([0-2][0-9]:[0-5][0-9]:[0-5][0-9]\).*/\1/p')
    echo "First job started at $FIRST"
    
    # Find Last time
    LAST=$(sed -n "/$regexLast/p" $logPathLogDay.$myDate | tail -1)
    LAST=$(echo $LAST | sed -n 's/.*\([0-2][0-9]:[0-5][0-9]:[0-5][0-9]\).*/\1/p')
    echo "Last job ended at $LAST"
    #Compare time
    # feeding variables by using read and splitting with IFS
    IFS=: read first_hour first_min first_sec <<< "$FIRST"
    IFS=: read last_hour last_min last_sec <<< "$LAST"
    
    # 
    # the 10# is there to avoid errors with leading zeros
    # by telling bash that we use base 10
    total_hours=$((10#$last_hour - 10#$first_hour))
    total_minutes=$((10#$last_min - 10#$first_min))
    total_secs=$((10#$last_sec - 10#$first_sec))
    
    echo "Tonight's work took $total_hours hours $total_minutes minutes and $total_secs seconds"

该脚本将查看当前日期,并搜索该日期文件、第一次出现的 BEGIN 和最后一次出现的 END,然后比较时间戳。

输出如下:

第一份工作于 19:00:01 开始

最后作业于 24:00:01 结束

今晚的工作耗时5小时0分0秒

这是我整理的一个快速脚本,您可以清理它并修改输出,如果需要的话将其放入函数等。

*编辑:此外,要运行此脚本,只需添加到您的 crontab 中,以便每天在您喜欢的时间运行。

**编辑:我添加了开始和结束正则表达式的变量。

我将看似工作参考号的内容转换为变量,因此您可以轻松更改它,甚至将其作为参数传递。

最后,我将日志的路径作为变量,以便也可以轻松更改。

作为旁注,我在脚本中添加了注释,尽管不是最详细的,但它们就在那里,以便您可以按照脚本进行更改以满足您的需求。与任何脚本一样,定制可以是无止境的!

您还可以将日期修改为:myDate=$(date --date="1 day ago" +'%d-%m-%Y')如果您希望查看前一天的日志。

相关内容