Необходимо будет передать статические опции 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=
link
, который указывает первый интерфейс с его ссылкой в работоспособном состоянииbootif
, который использует MAC-адрес, который pxelinux установил в переменной BOOTIF. IPAPPEND 2 набора в Вашем pxelinux.cfg файле, чтобы иметь pxelinux установил переменную BOOTIF.ibft
, который использует MAC-адрес интерфейса, указанного iBFTСуществуют много много опций, которые можно передать для запускать начальной загрузки. Можно получить полный список начальной загрузки и запустить опции сценария для RHEL/CentOS 6 здесь.
Что относительно -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
Я думаю, что для самого простого способа проверить, жив ли сайт, Вы могли бы использовать следующий метод:
curl -Is http://www.google.com | head -n 1
Это возвратится HTTP/1.1 200 OK
. Если возврат не соответствует Вашему выводу, затем вызывают для справки.
Вам нужно -s
(тихий) флаг, -f
флаг (сбой с кодом выхода на ошибке) и может использовать -o
флаг для перенаправления вывода:
curl www.websiteToTest.com -s -f -o /dev/null || echo "Website down." | mail -s "Website is down" admin@thesite.com
Это - просто плохой пример для простого сценария крона. Обычно, Вы хотите получить только одну почту, если веб-сайт снижается.
Меня недавно попросили придумайте что-нибудь, что больше походило бы на сложное сердцебиение.
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, чтобы найти ошибки.
вы можете получить статистику сетевого времени из 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
Ответ:
#!/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-секундный тайм-аут для вашего запроса. Ответ медленнее считается "не работоспособным" -f
флаг не сработает раньше, -S
покажет ошибки, -s
подавит нормальный output, -I
будет извлекать только заголовки HTTP, но не содержимое. (Как всегда, более подробная информация доступна в команде man curl
.) Директива -checkend
проверяет даты истечения срока действия сертификата. В моем примере это 20 дней (указано в секундах). Этот способ поможет вам при попытке протестировать сайт при наличии 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"
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, вы можете легко проверить наличие других кодов состояния, если хотите
curl -fsS http://example.org > /dev/null
. Это ничего не произведет, когда ничто не будет неправильно, но это распечатает код состояния по ошибкам, который меня устраивает. – palto 29.07.2013, 18:50-f
для будущих ссылок. – ahilsend 29.07.2013, 19:08