Проверка состояния веб-страницы с помощью завихрения

Необходимо будет передать статические опции IP ядру так, чтобы запускать процесс мог определить местоположение ks.cfg. Как Вы знаете, по умолчанию сетевая установка ищет адрес DHCP. Можно установить статический адрес путем передачи как минимум ip и дополнительно gw & dns при подсказке начальной загрузки.

linux ks=http://192.168.0.1/ks.cfg ip=192.168.0.100 gw=192.168.254.254 dns=192.168.0.2

Можно дополнительно указать устройство для использования одним из 5 способов.

ksdevice=
  • имя устройства интерфейса, например, eth0
  • MAC-адрес интерфейса, например, 00:12:34:56:78:9a
  • ключевое слово link, который указывает первый интерфейс с его ссылкой в работоспособном состоянии
  • ключевое слово bootif, который использует MAC-адрес, который pxelinux установил в переменной BOOTIF. IPAPPEND 2 набора в Вашем pxelinux.cfg файле, чтобы иметь pxelinux установил переменную BOOTIF.
  • ключевое слово ibft, который использует MAC-адрес интерфейса, указанного iBFT

Существуют много много опций, которые можно передать для запускать начальной загрузки. Можно получить полный список начальной загрузки и запустить опции сценария для RHEL/CentOS 6 здесь.

35
13.05.2019, 18:37
8 ответов

Что относительно -sSf? Из страниц справочника:

  -s/--silent
     Silent or quiet mode. Do not show progress meter or error messages.  
     Makes Curl mute.

  -S/--show-error
     When used with -s it makes curl show an error message if it fails.

  -f/--fail
     (HTTP)  Fail silently (no output at all) on server errors. This is mostly
     done to better enable scripts etc to better deal with failed attempts. In
     normal  cases  when a HTTP server fails to deliver a document, it returns
     an HTML document stating so (which often also describes  why  and  more).
     This flag will prevent curl from outputting that and return error 22.

     This method is not fail-safe and there are occasions where non-successful
     response codes will  slip  through,  especially  when  authentication  is
     involved (response codes 401 and 407).

Например:

curl -sSf http://example.org > /dev/null
39
27.01.2020, 19:36
  • 1
    sS не производил сообщение об ошибке по некоторым причинам. Я должен был добавить-f также. Корректная рабочая команда, кажется, curl -fsS http://example.org > /dev/null. Это ничего не произведет, когда ничто не будет неправильно, но это распечатает код состояния по ошибкам, который меня устраивает. –  palto 29.07.2013, 18:50
  • 2
    Хорошо, добавленный -f для будущих ссылок. –  ahilsend 29.07.2013, 19:08

Я думаю, что для самого простого способа проверить, жив ли сайт, Вы могли бы использовать следующий метод:

curl -Is http://www.google.com | head -n 1

Это возвратится HTTP/1.1 200 OK. Если возврат не соответствует Вашему выводу, затем вызывают для справки.

11
27.01.2020, 19:36
  • 1
    , Проверяющий, что код состояния имеет, вероятно, больше смысла как другие предложения –  Dukeatcoding 06.01.2016, 19:45
  • 2
    я получаю "HTTP/1.1 302 Найденных". –  Sponge Comrade 09.05.2017, 02:34

Вам нужно -s (тихий) флаг, -f флаг (сбой с кодом выхода на ошибке) и может использовать -o флаг для перенаправления вывода:

curl www.websiteToTest.com -s -f -o /dev/null || echo "Website down." | mail -s "Website is down" admin@thesite.com 

Это - просто плохой пример для простого сценария крона. Обычно, Вы хотите получить только одну почту, если веб-сайт снижается.

8
27.01.2020, 19:36

Меня недавно попросили придумайте что-нибудь, что больше походило бы на сложное сердцебиение.

for i in `curl -s -L cnn.com |egrep --only-matching "http(s?):\/\/[^ \"\(\)\<\>]*" | uniq` ; do curl -s -I $i 2>/dev/null |head -n 1 | cut -d$' ' -f2; done

Или, расширенный для большей читабельности,

for i in $(curl -s -L cnn.com |egrep --only-matching 'http(s?):\/\/[^ \"\(\)\<\>]*' | uniq)
do
    curl -s -I "$i" 2>/dev/null | head -n 1 | cut -d' ' -f2
done

Я сделал curl веб-сайт, проанализировал все ссылки из html, а затем curl эти проанализированные ссылки , выводит только код состояния. Затем я бы поискал коды состояния http> = 400, чтобы найти ошибки.

1
27.01.2020, 19:36

вы можете получить статистику сетевого времени из curl. задержки каждой фазы в цикле запроса / ответа могут быть полезны для определения работоспособности.

$ URL=https://example.com
$ curl "$URL" -s -o /dev/null -w \
> "response_code: %{http_code}\n
> dns_time: %{time_namelookup}
> connect_time: %{time_connect}
> pretransfer_time: %{time_pretransfer}
> starttransfer_time: %{time_starttransfer}
> total_time: %{time_total}
> "
response_code: 200

dns_time: 0.029
connect_time: 0.046
pretransfer_time: 0.203
starttransfer_time: 0.212
total_time: 0.212
8
27.01.2020, 19:36

Ответ:

#!/bin/bash -eu
timeout 3s curl -fIsS http://example.org > /dev/null
# and if you have TLS (https), check if it's about to expire:
true | openssl s_client -connect example.org:443 2>/dev/null | openssl x509 -noout -checkend "$((3600*24*20))"

Пояснения:

  • timeout 3s установит 3-секундный тайм-аут для вашего запроса. Ответ медленнее считается "не работоспособным"
  • curl -f флаг не сработает раньше, -S покажет ошибки, -s подавит нормальный output, -I будет извлекать только заголовки HTTP, но не содержимое. (Как всегда, более подробная информация доступна в команде man curl .) Директива
  • openssl -checkend проверяет даты истечения срока действия сертификата. В моем примере это 20 дней (указано в секундах).
1
27.01.2020, 19:36

Этот способ поможет вам при попытке протестировать сайт при наличии https:

#!/bin/bash
# put your domain in this var
https=https://www.somewebsite.com

# save the status in some variable 
status=`curl $https -k -s -f -o /dev/null && echo "SUCCESS" || echo "ERROR"`    

# print results (or use it in your scripts)
echo "testing $https=$status"
2
27.01.2020, 19:36

Curl имеет очень специфические коды состояния выхода
Почему бы просто не проверить их?

#!/bin/bash

##name: site-status.sh

FAIL_CODE=6

check_status(){
    LRED="\033[1;31m" # Light Red
    LGREEN="\033[1;32m" # Light Green
    NC='\033[0m' # No Color


    curl -sf "${1}" > /dev/null

    if [ ! $? = ${FAIL_CODE} ];then
        echo -e "${LGREEN}${1} is online${NC}"
    else
        echo -e "${LRED}${1} is down${NC}"
    fi
}


check_status "${1}"

Использование:

$ site-status.sh example.com

Результат:

$ example.com is online

Примечания:

Этот сценарий только проверяет, может ли сайт быть разрешен.

Этот код должен помочь вам, если все, что вас волнует, это то, что сайт работает или не работает.
Однако, если вы сделаете несколько изменений в блоке if/else, вы можете легко проверить наличие других кодов состояния, если хотите

3
27.01.2020, 19:36

Теги

Похожие вопросы