Як можна виміряти, скільки часу потрібно для запуску мого сценарію, і включити його в створений електронний лист?


11

У мене є простий скрипт bash, який виконує серію перевірок ( ping, nslookupі т. Д.), А потім надсилає звіт електронної пошти з висновком цих даних.

Я хотів би, щоб повідомлення електронної пошти включало інформацію про те, скільки часу запустив весь сценарій. Чи є простий спосіб зібрати цю інформацію?

Відповіді:


15

Я пропоную поглянути на bashзмінну SECONDS:

SECONDS : Щоразу, коли цей параметр посилається, кількість секунд після повернення виклику оболонки повертається. Якщо значення присвоєно SECONDS, значення, яке повертається після наступних посилань, - це кількість секунд з моменту присвоєння плюс присвоєне значення.

Таким чином, ви можете просто надрукувати цю змінну в кінці сценарію. Крім того, якщо ваш намір полягає в вимірюванні часу лише частини програми, то просто встановіть SECONDS=0на початку вимірюваний блок команд, а в кінці просто використовуйте значення, збережене в цій змінній.


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

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

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

8

Префікс вашої команди за допомогою, /usr/bin/timeі команда часу виведе час, який потрібен сценарію для запуску. Це більш портативно, ніж використання чогось bashконкретного.


6

Під час використання SECONDSі timeви отримаєте відносні значення. Якщо ви хочете мати абсолютні значення для цілей аудиту та звітності щодо того, коли запустився сценарій і коли він завершився, ви можете спробувати щось подібне до і після своїх команд date '+%Y%m%d%H%M%S.%N'. Це також може забезпечити кращу деталізацію, оскільки вона може захоплювати відмінності від другої секунди, оскільки у вас є такі команди, як pingправило, які виконуються протягом секунди.


1

Вкладіть свій сценарій. Щоб надіслати електронний лист, існує ряд варіантів. Я особисто віддаю перевагу msmtp для цього, ви можете визначити заголовки в стилі "тут" (вбудований) або використовувати окремий файл і позначати їх разом. Є всілякі альтернативи цьому, включаючи 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.