2012-10-05 8 views
22

Mam usługa przewidziane w http://localhost/test/testwebskrypt Linux z curl sprawdzenia usługa jest gotowy

Chcę napisać skrypt, aby sprawdzić, czy usługa jest z curl

Jeśli nie podano curl parametr, zwraca 200 OK ok prawda fałsz, dzięki czemu można go używać jest if-else blok skryptu linux

+0

Proszę nie zmieniać pytanie i dodać odpowiedź z przyjętą odpowiedzieć, ludzie będą wiedzieć, które rozwiązanie działa. –

+0

Nie rozumiem, dlaczego ostrzegłeś mnie, że nie mam edytować pytania? O ile wiem, nie edytowałem jeszcze tego. –

+0

Dodałeś rozwiązanie do pytania; Odwróciłem twoją aktualizację. –

Odpowiedz

44
curl -sL -w "%{http_code}\\n" "http://www.google.com/" -o /dev/null 
  • -s = wyjście SilentblokiSpółka Curl za
  • -L = przekierowań
  • -w = wyjście niestandardowy format
  • -o = przekierowuje wyjście HTML /dev/null

Przykład:

[~]$ curl -sL -w "%{http_code}\\n" "http://www.google.com/" -o /dev/null 
200 

I pewnie usunąć \\n gdybym przechwytuj wynik.

+3

** + 1 ** - doskonałe wykorzystanie wyczerpującej listy opcji linii poleceń curl. Jednym dodatkiem może być '-I", więc zamiast metody GET używana jest metoda HEAD. To wciąż weryfikuje, czy strona może zostać wygenerowana, ale oszczędza ci trochę przepustowości przez upuszczenie treści wyjściowej HTML. (Nadal chcesz "-o/dev/null", aby uniknąć wypluwania reszty nagłówków.) – ghoti

+0

Uwaga: "\\ n" (uciekający ukośnik odwrotny) jest wymagany tylko wtedy, gdy używasz bash jako swojego powłoka interaktywnie, ale jeśli umieścisz to w skrypcie LUB użyjesz tcsh, powinieneś użyć '\ n'.To jest kwestia cytowania; linia poleceń działa tak samo w obu powłokach, interaktywnie i w skryptach, jeśli zamiast tego używa się pojedynczych cudzysłowów, a la: ''% {kod_ http} \ n'' Prawdopodobnie najlepiej dla spójności, aby użyć zamiast tego. – ghoti

+0

to jest świetne. Połączyłem twoją odpowiedź z moim skryptem, który jest używany do uruchomienia usługi java i czekam, aż się skończy. Zaktualizowałem moje pytanie. Dzięki. –

0

To będzie sprawdzić nagłówki poprzez wget 2>&1 przepuszcza stderr do stdout grep filtry -O /dev/null prostu wyrzuca zawartość strony

if [ "\`wget http://example.org/ -O /dev/null -S --quiet 2>&1 | grep '200 OK'\`" != "" ]; 
then 
    echo Hello; 
fi; 

nie wiem Curl, ale nadal rozwiązanie

0

I Potrzebuję lepszej odpowiedzi na to, więc napisałem poniższy skrypt.

FakePhrase służy do wykrywania zgłoszeń adware HTTP "Search Assist".

#!/bin/bash 

fakePhrase="verizon" 
siteList=(
    'http://google.com' 
    'https://google.com' 
    'http://wikipedia.org' 
    'https://wikipedia.org' 
    'http://cantgettherefromhere' 
    'http://searchassist.verizon.com' 
) 

exitStatus=0 

function isUp { 
    http=`curl -sL -w "%{http_code}" "$1" -o temp_isUp` 
    fakeResponse=`cat temp_isUp | grep $fakePhrase` 
    if [ -n "$fakeResponse" ]; then 
    http=$fakePhrase 
    fi 
    case $http in 
    [2]*) 
    ;; 
    [3]*) 
    echo 'Redirect' 
    ;; 
    [4]*) 
    exitStatus=4 
    echo "$1 is DENIED with ${http}" 
    ;; 
    [5]*) 
    exitStatus=5 
    echo "$1 is ERROR with ${http}" 
    ;; 
    *) 
    exitStatus=6 
    echo "$1 is NO RESPONSE with ${http}" 
    ;; 
    esac 
} 

for var in "${siteList[@]}" 
do 
    isUp $var 
done 

if [ "$exitStatus" -eq "0" ]; then 
    echo 'All up' 
fi 

rm temp_isUp 
exit $exitStatus 
+2

... lub możesz po prostu przełączyć się na Google DNS lub OpenDNS i nie musisz tego robić. –

0

Użyj tego:

curl -o $CURL_OUTPUT -s -w %{http_code}\\n%{time_total}\\n $URL > $TMP_FILE 2>&1 
cat $TMP_FILE 
+0

możemy pobrać wymagany warunek z TMP_FILE –

1

samo jak @ burhan-Khalid dodania:

--connect-timeout 3 

--max-time 5 

test_command='curl -sL \ -w "%{http_code}\\n" \ "http://www.google.com:8080/" \ -o /dev/null \ --connect-timeout 3 \ --max-time 5' if [ $(test_command) == "200" ] ; then echo "OK" ; else echo "KO" ; fi

Powiązane problemy