#!/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 секунд
Это быстрое Скрипт, который я собрал вместе, вы можете очистить его и изменить вывод, при необходимости передать его в функцию и т. д.
* EDIT: Кроме того, для запуска этого сценария просто добавьте в ваш crontab, чтобы он запускался ежедневно в удобное для вас время.
** РЕДАКТИРОВАТЬ: Я добавил переменные для начального и конечного регулярных выражений.
Я превратил то, что выглядит как ссылка на вакансию №, как переменные, чтобы вы могли легко изменить ее или даже передать ее в качестве аргумента.
Наконец, я поместил путь к журналу как переменную, чтобы его можно было легко изменить.
В качестве примечания я добавил в сценарий комментарии, хотя и не самые подробные, но они есть, поэтому вы можете следить за сценарием и вносить изменения в соответствии с вашими потребностями. Как и в случае с любым другим скриптом, настройка может быть бесконечной!
Вы также можете изменить дату следующим образом: myDate = $ (date --date = "1 день назад" + '% d-% m-% Y')
, если вы предпочитаете это просмотреть журналы предыдущего дня.
Вы можете указать logwatch просматривать 7 дней вместо 1, изменив параметр Range
в файле logwatch.conf:
Range = between -7 days and -1 days
Вы можете указать logwatch запускаться еженедельно, а не ежедневно, переместив его из ежедневного каталога cron в еженедельный каталог cron:
mv /etc/cron.daily/00logwatch /etc/cron.weekly/
Просто для расширения нужно поставить именно это для командной строки версии:
logwatch <options> --range '-7 days'
Проверьте полученное письмо на предмет подтверждения. В нем должна быть указана текущая дата и самый старый проверенный журнал.