From 10bf297543b5a4839ae98c869009d8216dd5a0c0 Mon Sep 17 00:00:00 2001 From: AnthonyAxenov Date: Sat, 5 Jul 2025 00:19:28 +0800 Subject: [PATCH] =?UTF-8?q?=D0=92=D0=B5=D1=80=D0=BD=D1=83=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=8C=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B0=20ipt?= =?UTF-8?q?v=20exec,=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20rebuild?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ iptv | 38 ++++++++++++++++++++++++++++---------- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index f0dafc6..b550788 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ /.idea/ /.vscode/ +/docker/keydb/data/* +/log/**/* /iptvc/ /web/ /docs/ diff --git a/iptv b/iptv index af090b0..761ddee 100755 --- a/iptv +++ b/iptv @@ -338,6 +338,7 @@ docker.build_base_images() { # done subtitle "Построение образов" docker.compose build + [ ! -d web/cache/views ] && mkdir -p web/cache/views success "Базовые образы построены" } @@ -432,7 +433,7 @@ find_services_compose() { [ "$*" ] && for svc in "$@"; do grep_match "$svc" "^--?.*" && continue - svc="$(find_service_compose "$svc")" + svc="$(find_service_compose "${svc/iptv-/}")" services="$services $svc" done @@ -494,12 +495,11 @@ up() { process_help_arg subtitle "Создание и запуск контейнеров" - argl profiles 0 profiles - local services='' [ "$*" ] && services="$(find_services_compose "$@")" - COMPOSE_PROFILES="$profiles" docker.compose up "$services" --build --detach --remove-orphans && \ + [ ! -d web/cache/views ] && mkdir -p web/cache/views + docker.compose up "$services" --build --detach --remove-orphans && \ success 'Среда запущена успешно' } @@ -522,13 +522,10 @@ down() { process_help_arg subtitle "Остановка и удаление контейнеров" - argl profiles 0 profiles - [[ -z "$profiles" ]] && profiles="full" - local services='' [ "$*" ] && services="$(find_services_compose "$@")" - COMPOSE_PROFILES="$profiles" docker.compose down "$services" --remove-orphans && \ + docker.compose down "$services" --remove-orphans && \ success 'Среда остановлена успешно' } @@ -554,7 +551,7 @@ rebuild() { is_full=$(arg full 1) [ "$is_full" = 0 ] && is_full=$(argl full 1) - [ -n "$*" ] && down "$@" + [ -n "$*" ] && down "$@" || down [ "$is_full" = 1 ] && docker.build_base_images up "$@" @@ -579,6 +576,27 @@ purge() { success 'Образы удалены успешно' } +# Выполняет команду в контейнере +exec() { + process_help_arg + as_root=0 + svc="$1" + regex_match "$svc" "--?r(oot)?" && { as_root=1; shift; svc="$1"; } + + svc_correct="iptv-$(find_service_compose "$svc")" + command=("${@:2}") + regex_match "${command[0]}" "--?r(oot)?" && { as_root=1; unset "command[0]"; } + + [[ -z "${command[*]}" ]] && die "не указана команда для выполнения в контейнере" + + #TODO многострочные команды прокидываются корректно, но выполняется только первая строка? + if [[ "$as_root" == 1 ]]; then + docker.exec "$svc_correct" "${command[*]}" + else + docker.exec_www "$svc_correct" "${command[*]}" + fi +} + # Выводит логи сервиса logs() { process_help_arg @@ -602,7 +620,6 @@ stats() { docker.compose stats "$@" } - ######################################################## # Команды справки ######################################################## @@ -827,6 +844,7 @@ case "$COMMAND" in stop ) stop "$@" ;; r|rebuild ) rebuild "$@" ;; restart ) restart "$@" ;; + exec ) exec "$@" ;; purge ) purge ;; logs ) logs "$@" ;; stats ) stats "$@" ;;