Найдено и проверено живым прогоном на этой машине (реальный GTK-рабочий стол, реальные профили agy) — не по чтению кода. 1. Значок .desktop-записи был .ico. Измерено: GdkPixbuf.Pixbuf.new_from_file на HermesHub.ico падает с "Compressed icons are not supported". .desktop-файл с нерендерящейся иконкой меню приложений и файловый менеджер просто показывают пустым — без ошибки, молча. PNG в тех же ассетах уже был и загружается (проверено: 256x256). Подставлен app_icon_256.png. 2. Хаб нельзя было остановить иначе как из терминала. На Windows сервер стартует из HermesHubWeb.exe, который держит значок в системном трее — оттуда «Exit» останавливает процесс. На Linux сервер остаётся в фоне после закрытия окна браузера (так и задумано — не переустанавливать каждый раз), но ни кнопки в интерфейсе (её нет ни на одной платформе), ни трея, ни пункта меню не было вовсе. launcher/hermes-hub-stop.sh — недостающий эквивалент «Exit из трея»: доступен из меню приложений через собственный .desktop-пункт, использует ту же функцию, что и install/uninstall. Проверено живым прогоном: сервер запущен, остановлен через новый лаунчер, curl после этого получает connection refused. 3. uninstall-linux.sh не останавливал работающий хаб перед удалением файлов — та же причина, что install уже чинил для установки: с --purge-user-data это ещё и rm -rf каталогов, на которые у живого процесса открыты файловые дескрипторы. Измерено: сервер, запущенный в песочнице, оставался в списке процессов после uninstall-linux.sh до этой правки. Добавлена та же остановка, тем же кодом. 4. stop_running_hub была вписана отдельно в install-linux.sh и uninstall-linux.sh — две копии, которые разошлись бы при правке одной незамеченной для другой. Вынесена в installer/lib_stop_running_hub.sh, источается обоими скриптами и новым лаунчером остановки. Всё проверено дважды: прямым запуском install-linux.sh/uninstall-linux.sh в изолированной песочнице (не ~/.hermes) и через собранный dist/hermes-hub-setup.sh — тот самый файл, который уходит в релиз. Тесты: 738 -> 740 passed, 2 skipped, 4 deselected. Новый тест на .ico падает на прежней версии install-linux.sh (проверено git stash) и проходит после фикса. ruff check . чисто. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
54 lines
2.5 KiB
Bash
54 lines
2.5 KiB
Bash
#!/usr/bin/env bash
|
||
# ==============================================================================
|
||
# Hermes Hub — общая функция остановки работающего хаба (Linux/POSIX).
|
||
#
|
||
# До этого файла одна и та же функция была отдельно вписана в install-linux.sh
|
||
# и в uninstall-linux.sh — две копии, которые разошлись бы при первой же
|
||
# правке одной из них незамеченной для другой. Источник источается («source»)
|
||
# обоими скриптами и лаунчером остановки, поэтому логика одна.
|
||
#
|
||
# Использование: `source "$(dirname "$0")/lib_stop_running_hub.sh"`, затем
|
||
# вызвать `stop_running_hub`. Функция сама печатает ход дела и возвращает
|
||
# 0 (остановлен или нечего было останавливать) либо 1 (что-то осталось —
|
||
# вызывающий решает, прерывать ли из-за этого).
|
||
# ==============================================================================
|
||
|
||
stop_running_hub() {
|
||
local pattern="antigravity_provider.router.web|hermes_hub_web_entry"
|
||
local pids
|
||
# Только процессы ЭТОГО пользователя и только те, что относятся к хабу.
|
||
pids="$(pgrep -u "$(id -u)" -f "$pattern" 2>/dev/null | tr '\n' ' ')"
|
||
|
||
if [ -z "$pids" ]; then
|
||
echo " Работающий хаб не найден — останавливать нечего."
|
||
return 0
|
||
fi
|
||
|
||
echo " Найдены процессы хаба: $pids"
|
||
# shellcheck disable=SC2086
|
||
kill $pids 2>/dev/null || true
|
||
|
||
local waited=0
|
||
while [ "$waited" -lt 10 ]; do
|
||
sleep 1
|
||
waited=$((waited + 1))
|
||
pids="$(pgrep -u "$(id -u)" -f "$pattern" 2>/dev/null | tr '\n' ' ')"
|
||
[ -z "$pids" ] && break
|
||
done
|
||
|
||
if [ -n "$pids" ]; then
|
||
echo " Не завершились за 10 секунд, снимаю принудительно: $pids"
|
||
# shellcheck disable=SC2086
|
||
kill -9 $pids 2>/dev/null || true
|
||
sleep 1
|
||
pids="$(pgrep -u "$(id -u)" -f "$pattern" 2>/dev/null | tr '\n' ' ')"
|
||
fi
|
||
|
||
if [ -n "$pids" ]; then
|
||
echo " ⚠ Остались процессы: $pids. Снимите их вручную."
|
||
return 1
|
||
fi
|
||
|
||
echo " Хаб остановлен."
|
||
return 0
|
||
}
|