단일 명령줄에서 이메일을 보내는 Bash 스크립트

단일 명령줄에서 이메일을 보내는 Bash 스크립트

localhost 연결이 거부되었을 때 이메일을 보내도록 bash 스크립트를 작성 중인데, 연결이 열리면 이메일을 쓰지 않아야 합니다. 예를 들어:

netcat -z localhost 8287
if [ $? -ne 0 ]; then
  echo " Connection refused" |/usr/lib/sendmail -s "Port  doesn't function "  [email protected]
else
  echo "open"
fi

이 bash 스크립트를 시작하면 작동하지 않습니다. sendmail을 메일로 바꾸고 sendEmail도 교체했지만 매번 다른 오류가 발생합니다.

답변1

내 시스템에서는 다음이 작동합니다.

if ! nc -z $host $port; then
    echo "This message intentionally left blank" | mail -s "TCP port $port is not open on $host" $emailaddress
else
    : Do whatever you wanted to do
fi

시스템에 존재하지 않는 경우 tail -f /var/log/maillog스크립트를 실행하여 메시지가 전달되지 않는 이유를 확인하세요.

답변2

노력하다:

/usr/lib/sendmail -oi -t << EOF
Subject: Port doesn't function
To: [email protected]

Connection refused
EOF

이는 상당히 이식성이 있어야 합니다( sendmail에 있는 /usr/lib한 다른 위치를 시도하거나 /usr/sbin존재하지 않는 경우 찾아볼 수도 있습니다) sendmail.$PATH

-oi이다아니요단일 행의 종결자로 "."을 고려하십시오(여기에서는 필요하지 않지만 일반적으로 유용함).

POSIX 호환 시스템에서는 다음도 사용할 수 있습니다 mailx.

echo Connection refused | mailx -s "Port doesn't function" [email protected]

이 모든 것은 시스템에 메일 전송 에이전트가 올바르게 구성되어 있다고 가정합니다.

관련 정보