У меня есть простой скрипт bash, который выполняет серию проверок ( ping
и nslookup
т. Д.), А затем отправляет отчет по электронной почте с выводом этих данных.
Я хотел бы, чтобы в сообщении содержалась информация о том, сколько времени потребовалось на выполнение всего сценария. Есть ли простой способ собрать эту информацию?
источник
$SECONDS
; замечательно! Чтобы добавить к этому, вы можете конвертировать секунды в часы: минуты: секунды с чем-то вродеdate -d "1970-01-01 ${SECONDS} sec" +'%k:%M:%S'
(см.man date
Больше вариантов форматирования).SECONDS=0
на один сценарий и то же самое на другом сценарии, будут ли они мешать друг другу?START_TIME=$SECONDS; dosomething; ELAPSED_TIME=$(($SECONDS - $START_TIME))
. Это кажется немного более гибким для одновременного использования.Добавьте к вашей команде префикс,
/usr/bin/time
и команда time выведет время, необходимое для выполнения скрипта. Это более переносимо, чем использование чего-тоbash
конкретного.источник
При использовании
SECONDS
иtime
даст вам относительные значения. Если вы хотите иметь абсолютные значения для целей аудита и отчетности относительно времени запуска и завершения скрипта, вы можете попробовать что-то подобное до и после ваших командdate '+%Y%m%d%H%M%S.%N'
. Это также может дать вам лучшую детализацию, поскольку она может фиксировать различия в доли секунды, поскольку у вас есть команды,ping
которые обычно выполняются в течение секунды.источник
Вложите свой скрипт. Для отправки электронного письма есть несколько вариантов. Я лично за это одобряю msmtp, вы можете сами определить стиль заголовков «здесь» (inline) или использовать отдельный файл и объединить их вместе. Существуют всевозможные альтернативы, включая perl, python и т. Д.
Конечная пустая строка важна. поместите ваше собранное сообщение в msmtp следующим образом:
Пессимист зацикливался до успеха на разумное количество раз.
Полезная нагрузка также может быть html и генерироваться php.
Очень уродливая альтернатива для «пакетной» операции, скажем, в одночасье, - создать cronjob, и результат будет отправлен вместо stdout / stderr.
источник