Mam prosty skrypt bash, który uruchamia serię kontroli ( ping
, nslookup
, etc), a następnie wysyła raport e-mail z wyjściem tych danych.
Chcę, aby wiadomość e-mail zawierała informacje o tym, jak długo trwało uruchomienie całego skryptu. Czy istnieje prosty sposób na zebranie tych informacji?
źródło
$SECONDS
; to wspaniale! Aby dodać do tego, możesz przekonwertować sekundy na godziny: minuty: sekundy z czymś podobnymdate -d "1970-01-01 ${SECONDS} sec" +'%k:%M:%S'
(zobaczman date
więcej opcji formatowania).SECONDS=0
na jednym skrypcie i to samo na innym skrypcie, czy będą one kolidować ze sobą?START_TIME=$SECONDS; dosomething; ELAPSED_TIME=$(($SECONDS - $START_TIME))
. Wydaje się to nieco bardziej elastyczne w przypadku jednoczesnego użytkowania.Przedrostek polecenia,
/usr/bin/time
a polecenie time wyświetli czas potrzebny na uruchomienie skryptu. Jest to bardziej przenośne niż używanie czegośbash
konkretnego.źródło
Podczas używania
SECONDS
itime
da ci względne wartości. Jeśli chcesz mieć bezwzględne wartości dla celów kontroli i raportowania, kiedy skrypt był uruchamiany i kiedy został ukończony, możesz spróbować czegoś takiego przed i po wydaniu poleceńdate '+%Y%m%d%H%M%S.%N'
. Może to również dać lepszą szczegółowość, ponieważ może uchwycić różnice w sekundach, ponieważ masz polecenia,ping
które normalnie wykonują się w ciągu sekundy.źródło
Zagnieżdż swój skrypt. Aby wysłać wiadomość e-mail, istnieje wiele opcji. Osobiście wolę msmtp, możesz sam zdefiniować nagłówki w stylu „tutaj” (wbudowany) lub użyć osobnego pliku i połączyć je razem. Istnieją różnego rodzaju alternatywy dla Perla, Pythona itp.
Ważna jest końcowa pusta linia. cat twoją złożoną wiadomość do msmtp w ten sposób:
Pesymista zapętlał się aż do sukcesu rozsądną liczbę razy.
Ładunek może być również HTMLem i może być generowany przez php.
Bardzo brzydką alternatywą dla operacji „batchy” na noc jest utworzenie cronjob, a wyniki wysyłane są pocztą e-mail zamiast stdout / stderr.
źródło