Добавлена поддержка массового удаления сервисов (версия 1.6.6)
This commit is contained in:
parent
bb7ee5b16a
commit
e70135f5d9
102
rproxy
102
rproxy
|
|
@ -3,7 +3,7 @@
|
||||||
# Публикация локальных сервисов через SSH-туннели + nginx на VPS
|
# Публикация локальных сервисов через SSH-туннели + nginx на VPS
|
||||||
# https://github.com/l-ptrol/rProxy
|
# https://github.com/l-ptrol/rProxy
|
||||||
|
|
||||||
VERSION="1.6.5"
|
VERSION="1.6.6"
|
||||||
export PATH="/opt/bin:/opt/sbin:$PATH"
|
export PATH="/opt/bin:/opt/sbin:$PATH"
|
||||||
CONF_DIR="/opt/etc/rproxy"
|
CONF_DIR="/opt/etc/rproxy"
|
||||||
CONF_FILE="$CONF_DIR/rproxy.conf"
|
CONF_FILE="$CONF_DIR/rproxy.conf"
|
||||||
|
|
@ -764,27 +764,53 @@ do_remove_interactive() {
|
||||||
printf "\n"
|
printf "\n"
|
||||||
|
|
||||||
select_service "Выберите сервис для удаления" "all" || { pause; return; }
|
select_service "Выберите сервис для удаления" "all" || { pause; return; }
|
||||||
local name="$SELECTED_SERVICE"
|
local selected="$SELECTED_SERVICE"
|
||||||
[ "$name" = "__ALL__" ] && { warn "Для удаления выберите конкретный сервис"; pause; return; }
|
|
||||||
|
|
||||||
prompt "Удалить сервис '$name'? (д/н) [н]: "
|
if [ "$selected" = "__ALL__" ]; then
|
||||||
case "${REPLY:-н}" in
|
prompt "Удалить ВСЕ сервисы? (д/н) [н]: "
|
||||||
д|Д|y|Y|да|yes) ;;
|
case "${REPLY:-н}" in
|
||||||
*) msg "Отменено"; pause; return ;;
|
д|Д|y|Y|да|yes) ;;
|
||||||
esac
|
*) msg "Отменено"; pause; return ;;
|
||||||
|
esac
|
||||||
|
|
||||||
load_service "$name" || { pause; return; }
|
for f in "$SERVICES_DIR"/*.conf; do
|
||||||
is_running "$name" && do_stop_service "$name"
|
[ -f "$f" ] || continue
|
||||||
|
local name=$(basename "$f" .conf)
|
||||||
|
msg "Удаление сервиса '$name'..."
|
||||||
|
(
|
||||||
|
load_service "$name" || exit 1
|
||||||
|
is_running "$name" && do_stop_service "$name"
|
||||||
|
|
||||||
msg "Удаляю конфиги Nginx и пароли на VPS..."
|
ssh_cmd "rm -f $REMOTE_NGINX_DIR/rproxy_$name.conf /etc/nginx/rproxy_$name.htpasswd && nginx -t && systemctl reload nginx" >/dev/null 2>&1
|
||||||
ssh_cmd "rm -f $REMOTE_NGINX_DIR/rproxy_$name.conf /etc/nginx/rproxy_$name.htpasswd && nginx -t && systemctl reload nginx" >/dev/null 2>&1 || {
|
rm -f "$SERVICES_DIR/$name.conf"
|
||||||
warn "Не удалось полностью очистить VPS (возможно файлы уже удалены)"
|
rm -f "$(get_pid_file "$name")"
|
||||||
}
|
)
|
||||||
|
done
|
||||||
|
msg "Все сервисы удалены"
|
||||||
|
else
|
||||||
|
# Обработка списка сервисов (один или несколько через пробел)
|
||||||
|
local count=$(echo "$selected" | wc -w)
|
||||||
|
if [ "$count" -gt 1 ]; then
|
||||||
|
prompt "Удалить выбранные сервисы ($selected)? (д/н) [н]: "
|
||||||
|
case "${REPLY:-н}" in
|
||||||
|
д|Д|y|Y|да|yes) ;;
|
||||||
|
*) msg "Отменено"; pause; return ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
rm -f "$SERVICES_DIR/$name.conf"
|
for name in $selected; do
|
||||||
rm -f "$(get_pid_file "$name")"
|
msg "Удаление сервиса '$name'..."
|
||||||
|
(
|
||||||
|
load_service "$name" || exit 1
|
||||||
|
is_running "$name" && do_stop_service "$name"
|
||||||
|
|
||||||
msg "Сервис '$name' удалён"
|
ssh_cmd "rm -f $REMOTE_NGINX_DIR/rproxy_$name.conf /etc/nginx/rproxy_$name.htpasswd && nginx -t && systemctl reload nginx" >/dev/null 2>&1
|
||||||
|
rm -f "$SERVICES_DIR/$name.conf"
|
||||||
|
rm -f "$(get_pid_file "$name")"
|
||||||
|
)
|
||||||
|
msg "Сервис '$name' удалён"
|
||||||
|
done
|
||||||
|
fi
|
||||||
pause
|
pause
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -894,10 +920,11 @@ select_service() {
|
||||||
local idx=0
|
local idx=0
|
||||||
for f in "$SERVICES_DIR"/*.conf; do
|
for f in "$SERVICES_DIR"/*.conf; do
|
||||||
[ -f "$f" ] || continue
|
[ -f "$f" ] || continue
|
||||||
. "$f"
|
# Не загружаем весь конфиг здесь, чтобы не перезатирать глобальные SVC_* если не надо
|
||||||
|
local s_name=$(basename "$f" .conf)
|
||||||
|
|
||||||
local running=0
|
local running=0
|
||||||
is_running "$SVC_NAME" && running=1
|
is_running "$s_name" && running=1
|
||||||
|
|
||||||
# Фильтр
|
# Фильтр
|
||||||
case "$filter" in
|
case "$filter" in
|
||||||
|
|
@ -908,10 +935,16 @@ select_service() {
|
||||||
idx=$((idx + 1))
|
idx=$((idx + 1))
|
||||||
local st="${RED}○${NC}"
|
local st="${RED}○${NC}"
|
||||||
[ "$running" -eq 1 ] && st="${GREEN}●${NC}"
|
[ "$running" -eq 1 ] && st="${GREEN}●${NC}"
|
||||||
printf " ${BOLD}%d)${NC} %b %-14s %s:%s" "$idx" "$st" "$SVC_NAME" "$SVC_TARGET_HOST" "$SVC_TARGET_PORT"
|
|
||||||
[ -n "$SVC_DOMAIN" ] && printf " ${DIM}(%s)${NC}" "$SVC_DOMAIN"
|
# Получаем данные для отображения без полной загрузки (быстрее)
|
||||||
|
local s_target_host=$(grep 'SVC_TARGET_HOST=' "$f" | cut -d'"' -f2)
|
||||||
|
local s_target_port=$(grep 'SVC_TARGET_PORT=' "$f" | cut -d'"' -f2)
|
||||||
|
local s_domain=$(grep 'SVC_DOMAIN=' "$f" | cut -d'"' -f2)
|
||||||
|
|
||||||
|
printf " ${BOLD}%d)${NC} %b %-14s %s:%s" "$idx" "$st" "$s_name" "$s_target_host" "$s_target_port"
|
||||||
|
[ -n "$s_domain" ] && printf " ${DIM}(%s)${NC}" "$s_domain"
|
||||||
printf "\n"
|
printf "\n"
|
||||||
[ -z "$services" ] && services="$SVC_NAME" || services="$services $SVC_NAME"
|
[ -z "$services" ] && services="$s_name" || services="$services $s_name"
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ "$idx" -eq 0 ]; then
|
if [ "$idx" -eq 0 ]; then
|
||||||
|
|
@ -923,7 +956,7 @@ select_service() {
|
||||||
draw_separator
|
draw_separator
|
||||||
printf " ${BOLD}903)${NC} Все сервисы\n"
|
printf " ${BOLD}903)${NC} Все сервисы\n"
|
||||||
printf " ${BOLD}0)${NC} Назад\n"
|
printf " ${BOLD}0)${NC} Назад\n"
|
||||||
prompt "Выберите сервис: "
|
prompt "Выберите номер(а) (через пробел или 903): "
|
||||||
|
|
||||||
[ "$REPLY" = "0" ] && { SELECTED_SERVICE=""; return 1; }
|
[ "$REPLY" = "0" ] && { SELECTED_SERVICE=""; return 1; }
|
||||||
if [ "$REPLY" = "903" ]; then
|
if [ "$REPLY" = "903" ]; then
|
||||||
|
|
@ -931,14 +964,27 @@ select_service() {
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Извлечение имени сервиса по индексу (1-based) с валидацией
|
# Поддержка ввода нескольких номеров через пробел
|
||||||
if echo "$REPLY" | grep -qE '^[0-9]+$'; then
|
local sel_names=""
|
||||||
SELECTED_SERVICE=$(echo "$services" | cut -d' ' -f"$REPLY")
|
local valid=0
|
||||||
|
for r in $REPLY; do
|
||||||
|
if echo "$r" | grep -qE '^[0-9]+$'; then
|
||||||
|
local n=$(echo "$services" | cut -d' ' -f"$r")
|
||||||
|
if [ -n "$n" ]; then
|
||||||
|
[ -z "$sel_names" ] && sel_names="$n" || sel_names="$sel_names $n"
|
||||||
|
valid=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$valid" -eq 1 ]; then
|
||||||
|
SELECTED_SERVICE="$sel_names"
|
||||||
|
return 0
|
||||||
else
|
else
|
||||||
SELECTED_SERVICE=""
|
SELECTED_SERVICE=""
|
||||||
|
warn "Неверный выбор"
|
||||||
|
return 1
|
||||||
fi
|
fi
|
||||||
[ -z "$SELECTED_SERVICE" ] && { warn "Неверный выбор"; return 1; }
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# ══════════════════════════════════════════════════════════════════════
|
# ══════════════════════════════════════════════════════════════════════
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue