저는 Nginx 및 일부 WordPress 사이트에서 Ubuntu 16.04를 사용합니다. 때로는 오랫동안(>=1개월) 웹사이트를 방문하지 않거나 웹사이트가 다운되었을 수도 있습니다.
내 Nginx-WordPress 사이트 중 하나가 다운되는 경우(이유는 언급되지 않음) 내 Gmail 계정으로 이메일을 보낼 수 있는 작은 유틸리티를 찾고 있습니다.
지금까지 고려된 방법
1. 처음부터 도구 만들기
- 내 SMTP 서버에 대한 기본이 아닌 전체 구성을 만듭니다.
- 호스팅 공급자 DNS 관리 도구에서 DNS 레코드를 추가하고 구성합니다.
- 각 도메인에 주간 크론 작업을 추가
curl -l -L
하고 해당 출력을 파일에 저장합니다. - 각 파일을 확인하고 상태 코드가 200이 아닌 경우 자신에게 이메일을 보내는 주간 크론 작업(예: 한 시간 후)을 추가합니다.
이는 간단해 보이지만 실제로는 꽤 복잡하고(복잡할 필요는 없지만) 약간 취약할 수도 있습니다. 전용, 공개, 유지 관리 유틸리티가 나에게 더 적합할 수 있습니다.
2. 타사 도구
화려한 제3자를 이용하고 싶지 않아요네트워크 모니터링Nagios, Icinga, Zabbix, Shinken 등과 같은 서비스는 모두 이러한 특별한 이유로 과잉인 것 같습니다.
3.Postfix 플러그인
도구가 Postfix를 사용할 수 있도록 Postfix
구성을 설치했습니다 . 저는 단지 Postfix 기본값을 사용하고 있으며 DNS 레코드를 추가하거나 구성하지 않고도 internet-site
그 위에 몇 가지 기본 구성을 추가할 수 있습니다 .internet-site
Postfix를 재구성하기 위한 대화형 프로그램 유틸리티를 사용하면 Ubuntu-Nginx-WordPress-Environment 설치 스크립트에서 많은 SMTP 구성 데이터를 입력할 필요가 없습니다. 어쩌면 나중에 일부 DNS 레코드를 설정해야 할 수도 있습니다. 그게 전부입니다. 어떤 식으로든 프로세스를 단순화하는 모든 것이 나에게는 선택 사항입니다.
4. 스팸 필터 처리
Gmail에서 실수로 첫 번째 이메일(또는 첫 번째 이메일 배치)을 스팸으로 이동하더라도 해당 이메일을 허용 목록에 추가할 수 있습니다.
내 질문
이 동작을 수행하는 데 사용할 수 있는 유틸리티가 있습니까?
답변1
가장 좋은 방법은 다음과 같은 서비스를 사용하는 것입니다.로봇을 정상적으로 실행. 무료 등급은 50개 미만의 사이트에 적용되며 전문 요금제는 상당히 저렴합니다. 간단한 핑 확인과 HTTP 상태 코드 확인도 수행합니다.
그 결과 (귀하가 제어할 수 있는) 추가 실패 지점을 추가하지 않게 됩니다. 더 이상 모니터링 서비스를 유지하고 업데이트할 필요가 없습니다.
답변2
다음과 같은 것을 사용할 수 있습니다.
> cat email_warning.sh
#!/bin/bash
#
# email_warning.sh
#
UP=true
[email protected]
[email protected]
MAX=5
URL="https://$(hostname)/"
function doMail {
S="$1 $(date)"
F=$(echo $S | perl -p0e 's/[\s\t ]+/_/g;s/^(.{122}).*$/$1/g')
echo -e "Subject:$S\n\n$S" | sendmail -F $F -f $FROM $TO
}
function doUP {
curl -s -m $MAX "$URL" > /dev/null
R=$?;
if [ "$R" == "0" -a "$UP" == false ] ; then
UP=true
doMail "recovered $URL"
elif [ "$R" != "0" -a "$UP" == true ] ; then
UP=false
doMail "over $MAX s for $URL"
fi
}
while [ "" == "" ] ; do
ping -c 2 8.8.8.8 >/dev/null 2>&1
if [ "$?" == "0" ] ; then
doUP
fi
sleep 60
done
- tmux/screen/nohup에서 실행하세요(또는 cron 등을 사용하세요
echo $UP > /dev/shm/email_warning.tmp
). - 네트워크 및 서버 문제에 대한 이메일도 필요한 경우 스크립트를 조정하여 로컬 서비스 또는 원격 서비스를 모니터링할 수 있습니다.
- 작동 불가능한 데이터베이스와 같은 다른 오류 모드에 대한 서비스 응답을 확인할 수도 있습니다.
- 홈 네트워크에 있지 않는 한 자체적으로 작동하는 SMTP 서버는 필요하지 않습니다(sendmail은 postfix를 통해 설치되지만).
- doMail 기능은 데이터 없이 Gmail을 휴대전화로 전달하는 데 가장 적합하도록 설계되었습니다.
- Gmail 스팸 필터가 있으면 문제가 되지 않습니다.효과적인 SPFDNS에 등록하거나 연락처에 이메일 주소를 추가하고 스팸 방지 필터를 추가하세요.
답변3
아래에 작성한 스크립트를 수정해 보세요. 내 예에는 잘 알려진 호스트 3개와 존재하지 않는 호스트 2개가 포함되어 있습니다.
pingtest.sh
HOSTLIST='www.google.com www.oracle.com www.facebook.com www.sdfafdsfdsf.com www.uieyafbmndhfjsbxcvn.com'
BAD_HOSTLIST=
for HOST in $HOSTLIST ; do
echo $HOST
ping -c 3 -w 5 $HOST || BAD_HOSTLIST="$BAD_HOSTLIST $HOST"
echo =======================
done
if [ -n "$BAD_HOSTLIST" ] ; then
echo ___________________________________________
echo The following hosts failed the ping test:-
echo $BAD_HOSTLIST | xargs -n 1
echo $BAD_HOSTLIST | mailx -s 'Hosts that failed the ping test' [email protected]
fi
메일 전달자를 신속하게 설정해야 하는 경우 ssmtp 사용에 대한 짧고 간단한 문서를 참조하세요.https://www.cyberciti.biz/tips/linux-use-gmail-as-a-smarthost.html
스크립트의 출력을 간단히 살펴보면 다음과 같습니다.
# ./pingtest.sh
www.google.com
PING www.google.com (216.58.200.100) 56(84) bytes of data.
64 bytes from www.google.com (216.58.200.100): icmp_seq=1 ttl=55 time=29.8 ms
64 bytes from www.google.com (216.58.200.100): icmp_seq=2 ttl=55 time=28.4 ms
64 bytes from www.google.com (216.58.200.100): icmp_seq=3 ttl=55 time=30.3 ms
--- www.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 28.483/29.577/30.365/0.810 ms
=======================
www.oracle.com
PING e870.dscx.akamaiedge.net (104.116.147.64) 56(84) bytes of data.
64 bytes from www.oracle.com (104.116.147.64): icmp_seq=1 ttl=56 time=29.5 ms
64 bytes from www.oracle.com (104.116.147.64): icmp_seq=2 ttl=56 time=28.3 ms
64 bytes from www.oracle.com (104.116.147.64): icmp_seq=3 ttl=56 time=27.8 ms
--- e870.dscx.akamaiedge.net ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 27.842/28.570/29.503/0.706 ms
=======================
www.facebook.com
PING star-mini.c10r.facebook.com (157.240.8.35) 56(84) bytes of data.
64 bytes from www.facebook.com (157.240.8.35): icmp_seq=1 ttl=53 time=27.8 ms
64 bytes from www.facebook.com (157.240.8.35): icmp_seq=2 ttl=53 time=79.4 ms
64 bytes from www.facebook.com (157.240.8.35): icmp_seq=3 ttl=53 time=79.0 ms
--- star-mini.c10r.facebook.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 27.887/62.130/79.467/24.215 ms
=======================
www.sdfafdsfdsf.com
ping: www.sdfafdsfdsf.com: Name or service not known
=======================
www.uieyafbmndhfjsbxcvn.com
ping: www.uieyafbmndhfjsbxcvn.com: Name or service not known
=======================
___________________________________________
The following hosts failed the ping test:-
www.sdfafdsfdsf.com
www.uieyafbmndhfjsbxcvn.com
답변4
아직 이메일을 사용하지 않으신다면 다음을 이용해 보세요.총알을 밀어, 그러면 휴대전화로 푸시 알림이 전송됩니다 curl
. 모바일 기기에 설치해야 합니다.
그런 다음 사이트를 컬링하는 작은 bash 스크립트를 만들고 사이트가 응답하지 않으면 다음과 같이 휴대폰으로 직접 푸시 알림을 보낼 수 있습니다.
curl -u $auth_token: https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="$MSG"
$auth_token
등록 후 Pushbullet 인증 토큰은 어디에 있습니까?