Как измерить, сколько времени потребуется для запуска моего скрипта И включить его в создаваемое им электронное письмо?


11

У меня есть простой скрипт bash, который выполняет серию проверок ( pingи nslookupт. Д.), А затем отправляет отчет по электронной почте с выводом этих данных.

Я хотел бы, чтобы в сообщении содержалась информация о том, сколько времени потребовалось на выполнение всего сценария. Есть ли простой способ собрать эту информацию?

Ответы:


15

Я предлагаю взглянуть на bashпеременную SECONDS:

СЕКУНДЫ : Каждый раз, когда на этот параметр ссылаются, возвращается количество секунд с момента вызова оболочки. Если значение присваивается SECONDS, значение, возвращаемое при последующих ссылках, представляет собой количество секунд с момента назначения плюс назначенное значение.

Таким образом, вы можете просто напечатать эту переменную в конце скрипта. В качестве альтернативы, если вы хотите измерить время только части программы, просто установите SECONDS=0в начале измеряемого блока команд, а в конце просто используйте значение, сохраненное в этой переменной.


Я никогда не знал о $SECONDS; замечательно! Чтобы добавить к этому, вы можете конвертировать секунды в часы: минуты: секунды с чем-то вроде date -d "1970-01-01 ${SECONDS} sec" +'%k:%M:%S'(см. man dateБольше вариантов форматирования).
Sparhawk

Мне очень нравится этот подход, но я все еще немного сбит с толку. Допустим, я запускаю один и тот же сценарий на расстоянии нескольких секунд друг от друга. Если я установлю SECONDS=0на один сценарий и то же самое на другом сценарии, будут ли они мешать друг другу?
Майк Б

3
Неважно - я наткнулся на обратную связь Тома в посте переполнения стека ( stackoverflow.com/a/5153036/344780 ), который по сути вычитает разницу START_TIME=$SECONDS; dosomething; ELAPSED_TIME=$(($SECONDS - $START_TIME)). Это кажется немного более гибким для одновременного использования.
Майк Б

8

Добавьте к вашей команде префикс, /usr/bin/timeи команда time выведет время, необходимое для выполнения скрипта. Это более переносимо, чем использование чего-то bashконкретного.


6

При использовании SECONDSи timeдаст вам относительные значения. Если вы хотите иметь абсолютные значения для целей аудита и отчетности относительно времени запуска и завершения скрипта, вы можете попробовать что-то подобное до и после ваших команд date '+%Y%m%d%H%M%S.%N'. Это также может дать вам лучшую детализацию, поскольку она может фиксировать различия в доли секунды, поскольку у вас есть команды, pingкоторые обычно выполняются в течение секунды.


1

Вложите свой скрипт. Для отправки электронного письма есть несколько вариантов. Я лично за это одобряю msmtp, вы можете сами определить стиль заголовков «здесь» (inline) или использовать отдельный файл и объединить их вместе. Существуют всевозможные альтернативы, включая perl, python и т. Д.

Reply-To: someone@somehost
Sender: someone <someone@somehost>
To: somebody@somewhere.else
Subject: some subject
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/html; charset="iso-8859-1"

Конечная пустая строка важна. поместите ваше собранное сообщение в msmtp следующим образом:

cat assembled.eml | msmtp somebody@somewhere.else

Пессимист зацикливался до успеха на разумное количество раз.

Полезная нагрузка также может быть html и генерироваться php.

Очень уродливая альтернатива для «пакетной» операции, скажем, в одночасье, - создать cronjob, и результат будет отправлен вместо stdout / stderr.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.