나는 내가 실행하는 다양한 Node 서버의 http 응답을 테스트한 다음 Nginx에서 502 오류 응답(하나 이상의 서버가 충돌했음을 의미)이 있으면 나에게 이메일을 보내는 스크립트를 작성하려고 합니다.
내 접근 방식은 쉘 스크립트를 작성하여 이를 크론 작업으로 실행하는 것이며, ssmtp를 사용하여 Gmail을 통해 메시지를 보냅니다. 다음은 스니펫입니다.
messageTemplate=`cat /home/sites/mailmsg.txt`
...
email="$messageTemplate One or more sites is down!"
mailCommand=`mail -s [email protected] < $email`
ssmtp 메일 템플릿(받는 사람:, 보낸 사람: 등)의 내용을 문제 없이 가져올 수 있습니다. 나는 이메일 라인이 잘 연결되어 있다고 확신합니다. 문제는 mailCommand 행이 다음 행과 함께 실패한다는 것입니다.
line 31: $email: ambiguous redirect
mail
본질적으로 messageTemplate + 사용자 정의 메시지를 첫 번째 명령(이 경우)에 파이프하는 올바른 방법은 무엇입니까?
답변1
내 수정구슬은 귀하의 메시지 텍스트에 다음 <
또는 중 하나가 포함될 수 있다고 생각합니다 >
.
내가 보기엔 당신의 용도가 맞는 것 같아요
mailCommand=`mail -s [email protected] < $email`
원하는 대로 수행되지 않습니다. 이는 $email
파일 이름으로 내용을 취하고( $email
몇 단어가 포함되어 있기 때문에 다소 실패함) 해당 내용을 읽으려고 시도하고 해당 내용을 command 에 넣은 mail
다음 명령의 출력을 mail
다음에 할당합니다. 변수 mailCommand
.
내 생각에는 당신이 다음과 같은 것을 원한다는 것입니다
echo "$email" | mail -s [email protected]
즉, 변수에 문자열을 가져와 email
메일러에 공급합니까?
(그런데 이제 많은 사람들이 $(foo)
역따옴표 대신 명령 대체 표기법을 선호합니다.)
답변2
messageTemplate=`cat /home/sites/mailmsg.txt`
...
mailCommand=`echo "$messageTemplate One or more sites is down"\! | mail -s [email protected]`
또는
email="$messageTemplate One or more sites is down"\!
mailCommand=`echo "$email" | mail -s [email protected]`