스크립트 실행에 걸리는 시간을 측정하고 생성 한 이메일에 포함시키는 방법은 무엇입니까?


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하나의 스크립트와 다른 스크립트에서 같은 일에, 그들은 서로 방해?
Mike B

3
신경 쓰지 않음-나는 스택 오버플로 게시물 ( stackoverflow.com/a/5153036/344780 ) 에서 Tom의 피드백을 우연히 발견했습니다 START_TIME=$SECONDS; dosomething; ELAPSED_TIME=$(($SECONDS - $START_TIME)). 이것은 동시에 사용하기에 약간 더 유연 해 보입니다.
Mike B

8

명령 앞에 접두사를 붙이면 /usr/bin/timetime 명령이 스크립트를 실행하는 데 걸린 시간을 출력합니다. 이것은 bash특정한 것을 사용하는 것보다 이식성이 뛰어납니다.


6

사용하는 동안 SECONDStime당신의 상대 가치를 제공 할 것입니다. 스크립트 실행시기 및 완료 시점과 관련하여 감사 및보고 목적에 대한 절대 값을 원한다면 명령 전후에 이와 같은 것을 시도 할 수 있습니다 date '+%Y%m%d%H%M%S.%N'. 또한 ping일반적으로 1 초 이내에 실행되는 것과 같은 명령을 사용하여 1 초 미만의 차이를 캡처 할 수 있으므로보다 세분화 된 기능을 제공 할 수 있습니다 .


1

스크립트를 중첩하십시오. 이메일을 보내려면 여러 가지 옵션이 있습니다. 개인적으로 msmtp를 선호합니다. 헤더를 직접 "here"스타일 (인라인)로 정의하거나 별도의 파일을 사용하여 함께 묶을 수 있습니다. 펄, 파이썬 등을 포함하는 모든 종류의 대안이 있습니다.

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 대신 출력이 이메일로 전송됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.