Skip to content

Latest commit

 

History

History
77 lines (62 loc) · 3.04 KB

practice.md

File metadata and controls

77 lines (62 loc) · 3.04 KB

Тестовые практические задания

  1. Необходимо проходить по списку URL'ов и проверять их доступность. Условия:
    • Список URL'ов находится в файле /urls.txt;
    • Доступный URL - значит код ответа не 5XX или 4XX;
    • Проверка должна быть оформлена в виде функции bash, которая должна вызываться внутри скрипта;
    • Функция должна принимать в качестве входного параметра путь к файлу с URL'ами;
    • При любом ответе недоступности от сервиса - прерывать дальнейшую проверку. Временное ограничение 20 мин.
Ответ

Скрипт проверки. Запускать ./script.sh <путь до файла с URLs>

#!/usr/bin/env bash

set -xueo pipefail

FILE_URLS=${1:-}
if [[ -z "${FILE_URLS}" ]]; then
  echo "File with URLs list do not defined."
  exit 1
fi

function checkUrls() {
  local URLS=$1
  for URL in $(cat $URLS); do
    STATUS=`curl -LI "${URL}" -o /dev/null -w '%{http_code}' -s`
    if [[ "${STATUS}" == "500" ]] || [[ "${STATUS}" == "400" ]]; then
      echo "URL ${URL} unavailable!"
      exit 1
    else
      echo "URL ${URL} available."
    fi
  done
}

checkUrls "${FILE_URLS}"
  1. Есть две изолированные сети /25 - 192.168.1.0 (gw: 192.168.1.1), 192.168.1.128 (gw: 192.168.1.129). Есть два сервера со следующими таблицами маршрутизации
192.168.1.3
routes
0.0.0.0/0 192.168.1.1

192.168.1.146
routes
192.168.1.128/24 192.168.1.129

Что нужно сделать, чтобы эти сервера "видели" друг друга?

  1. В конфиге nginx некоторого проекта есть два десятка различных location, которые делятся на три базовых типа - memcache, dynamic, static. Лог проекта единый, но для анализа требуется различать записи в логе каким-либо способом. По именам файлов тип location различить нельзя, разделить на три лога также нельзя. Предложите решение.
Ответ Использовать вывод в syslog и определить tag. Например:
location /memcache {
  access_log syslog:server=unix:/dev/log,tag=nginx_memcache;
  error_log syslog:server=unix:/dev/log,tag=nginx_memcache;
}

location /dynamic {
  access_log syslog:server=unix:/dev/log,tag=nginx_dynamic;
  error_log syslog:server=unix:/dev/log,tag=nginx_dynamic;
}

/static - соответственно. Вывод в определенный файл syslog можно указать опцией :syslogtag