38 lines
2.6 KiB
Bash
Executable file
38 lines
2.6 KiB
Bash
Executable file
#!/bin/bash
|
||
echo "Параллельное выполнение скриптов и создание репозиториев для каталогов проектов."
|
||
# выполнение скриптов внутри каталога
|
||
function orchestrate {
|
||
echo "Обработка: $1"
|
||
cd "$1" || return
|
||
while (($(date '+%s%3N') - time_ms < 120000)); do
|
||
while (($(date '+%s%3N') - time_ms < 120000)); do
|
||
# 1 Удаление репозитория на сервере
|
||
./.repo_remote.sh "delete" 2>/dev/null >.repo_remote.log
|
||
# 2 Создание репозитория на сервере
|
||
./.repo_remote.sh "create" 2>/dev/null >>.repo_remote.log
|
||
# 3 Проверка корректности ответа от сервера при создании репозитория
|
||
case "$(tail -n+10 .repo_remote.log | grep -cE '^HTTP/[1,2].{,2}? [4,5]')" in
|
||
0) break ;; *) echo "Ошибка 400-500 при подключении к серверу: $1" ;;
|
||
esac
|
||
done
|
||
# 4 Создание локального репозитория и отправка данных на сервер
|
||
./.repo_local.sh 2>/dev/null >.repo_local.log
|
||
# 5 Изменение настроек репозитория на сервере, отключение ненужного
|
||
./.repo_remote.sh "options" 2>/dev/null >>.repo_remote.log
|
||
# 6 Проверка доступности данных в вёб-интерфейсе на сервере
|
||
for ((tms = "$(date '+%s%3N')"; $(date '+%s%3N') - tms < 3000; )); do
|
||
case "$(./.repo_testing.sh | grep -cF '[91m')" in
|
||
0) pass=true && break 2 ;; *) echo "Ожидание данных на сервере: $1" ;;
|
||
esac
|
||
done
|
||
done
|
||
[ "$pass" != true ] && echo "Ожидание более 2 минут: $1"
|
||
}
|
||
export -f orchestrate
|
||
cd ../.. # выход из папки и из репозитория
|
||
export time_ms && time_ms="$(date '+%s%3N')"
|
||
# запуск параллельной обработки всех каталогов проектов, расположенных на одном уровне с текущим
|
||
find . -mindepth 1 -maxdepth 1 -type d -printf 'orchestrate "%p"\0' | xargs -n1 -0 -P0 bash -c
|
||
# замер продолжительности выполнения в миллисекундах, пересчёт в минуты, секунды и миллисекунды
|
||
tms="$(($(date '+%s%3N') - time_ms))" && min="$((tms / 1000 / 60))" && sec="$((tms / 1000 % 60))"
|
||
ms="$((tms % 1000))" && printf 'Общее время выполнения: %02d:%02d.%03d мс.\n' "$min" "$sec" "$ms"
|