일련의 검사( 등)를 실행한 다음 해당 데이터의 출력이 포함된 이메일 보고서를 보내는 간단한 bash 스크립트가 ping
있습니다 nslookup
.
전체 스크립트를 실행하는 데 걸리는 시간에 대한 정보를 이메일에 포함하고 싶습니다. 이 정보를 수집하는 쉬운 방법이 있습니까?
답변1
bash
변수를 살펴보는 것이 좋습니다 SECONDS
.
두번째: 이 매개변수가 참조될 때마다 셸이 호출된 이후의 시간(초)을 반환합니다. 값이 SECONDS에 할당되면 후속 참조에서 반환되는 값은 할당 이후의 초 수에 할당된 값을 더한 값입니다.
따라서 스크립트 끝에 변수를 간단히 인쇄할 수 있습니다. 또는 프로그램의 일부에 대한 시간만 측정하는 것이 목적이라면 SECONDS=0
이를 측정하는 명령 블록의 시작 부분에 설정하고 마지막에는 해당 변수에 저장된 값을 사용하면 됩니다.
답변2
command 접두사가 붙은 /usr/bin/time
time 명령은 스크립트를 실행하는 데 걸린 시간을 출력합니다. 이것은 bash
특정한 것을 사용하는 것보다 이식성이 더 좋습니다.
답변3
SECONDS
및를 사용하면 time
상대 값이 제공됩니다. 스크립트가 실행되고 완료되는 데 걸린 시간에 대한 감사 및 보고 목적의 절대값을 얻으려면 명령 전후에 이와 같은 것을 시도해 볼 수 있습니다
date '+%Y%m%d%H%M%S.%N'
. 또한 ping
일반적으로 1초 내에 실행되는 명령이 있기 때문에 1초 미만의 차이를 포착하므로 더 나은 세분성을 제공합니다 .
답변4
스크립트를 중첩하세요. 이메일을 보내려면 몇 가지 옵션이 있습니다. 나는 개인적으로 헤더 "여기" 스타일을 직접 정의하거나(인라인) 별도의 파일을 사용하여 함께 넣을 수 있는 msmtp를 선호합니다. Perl, Python 등 다양한 대안이 있습니다.
Reply-To: someone@somehost
Sender: someone <someone@somehost>
To: [email protected]
Subject: some subject
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/html; charset="iso-8859-1"
후행 빈 줄이 중요합니다. 조립된 메시지를 msmtp로 분류하세요.
cat assembled.eml | msmtp [email protected]
비관주의자는 성공할 때까지 합리적인 횟수만큼 반복합니다.
페이로드는 HTML이거나 PHP로 생성될 수도 있습니다.
야간 "배치" 작업에 대한 매우 보기 흉한 대안은 cronjob을 생성하고 stdout/stderr 대신 출력을 이메일로 보내는 것입니다.