Пусть logwatch посылает отчеты только раз в неделю

 #!/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') , если вы предпочитаете это просмотреть журналы предыдущего дня.

1
19.04.2019, 17:02
2 ответа

Вы можете указать logwatch просматривать 7 дней вместо 1, изменив параметр Rangeв файле logwatch.conf:

Range = between -7 days and -1 days

Вы можете указать logwatch запускаться еженедельно, а не ежедневно, переместив его из ежедневного каталога cron в еженедельный каталог cron:

mv /etc/cron.daily/00logwatch /etc/cron.weekly/
3
27.01.2020, 23:30

Просто для расширения нужно поставить именно это для командной строки версии:

logwatch <options>  --range '-7 days'    

Проверьте полученное письмо на предмет подтверждения. В нем должна быть указана текущая дата и самый старый проверенный журнал.

1
27.01.2020, 23:30

Теги

Похожие вопросы