pingtest.sh

pingtest.sh

저는 Nginx 및 일부 WordPress 사이트에서 Ubuntu 16.04를 사용합니다. 때로는 오랫동안(>=1개월) 웹사이트를 방문하지 않거나 웹사이트가 다운되었을 수도 있습니다.

내 Nginx-WordPress 사이트 중 하나가 다운되는 경우(이유는 언급되지 않음) 내 Gmail 계정으로 이메일을 보낼 수 있는 작은 유틸리티를 찾고 있습니다.

지금까지 고려된 방법

1. 처음부터 도구 만들기

  1. 내 SMTP 서버에 대한 기본이 아닌 전체 구성을 만듭니다.
  2. 호스팅 공급자 DNS 관리 도구에서 DNS 레코드를 추가하고 구성합니다.
  3. 각 도메인에 주간 크론 작업을 추가 curl -l -L하고 해당 출력을 파일에 저장합니다.
  4. 각 파일을 확인하고 상태 코드가 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 인증 토큰은 어디에 있습니까?

관련 정보