Spaces:
Paused
Paused
Update start.sh
Browse files
start.sh
CHANGED
|
@@ -1,62 +1,87 @@
|
|
| 1 |
#!/bin/sh
|
| 2 |
-
set -e
|
| 3 |
|
| 4 |
-
echo "
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
|
|
|
|
|
|
| 8 |
|
|
|
|
| 9 |
if [ -z "$TELEGRAM_API_ID" ] || [ -z "$TELEGRAM_API_HASH" ]; then
|
| 10 |
echo "Ошибка: Переменные окружения TELEGRAM_API_ID и TELEGRAM_API_HASH должны быть установлены."
|
| 11 |
-
echo "Пожалуйста, добавьте их в секреты вашего Hugging Face Space."
|
| 12 |
exit 1
|
| 13 |
fi
|
| 14 |
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
echo "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
|
|
|
|
|
|
|
|
|
|
| 19 |
telegram-bot-api \
|
| 20 |
--local \
|
| 21 |
--http-port=${TELEGRAM_MAIN_PORT} \
|
| 22 |
-
--http-stat-port
|
| 23 |
-
--http-stat-ip-address=
|
| 24 |
-
--dir
|
| 25 |
-
--temp-dir
|
| 26 |
|
| 27 |
TELEGRAM_PID=$!
|
| 28 |
echo "Telegram Bot API запущен с PID: $TELEGRAM_PID"
|
| 29 |
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
echo "Попытка запустить туннель localhost.run для порта статистики ${TELEGRAM_STATS_PORT}..."
|
| 33 |
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
nokey@localhost.run &
|
| 41 |
-
|
| 42 |
-
TUNNEL_PID=$!
|
| 43 |
-
echo "Процесс туннеля (ssh) запущен с PID: $TUNNEL_PID (если успешно)"
|
| 44 |
|
|
|
|
| 45 |
cleanup() {
|
| 46 |
echo "Получен сигнал завершения. Остановка процессов..."
|
| 47 |
-
|
| 48 |
-
kill $
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
wait $TELEGRAM_PID 2>/dev/null
|
| 50 |
-
wait $TUNNEL_PID 2>/dev/null
|
| 51 |
echo "Процессы остановлены."
|
| 52 |
-
exit 0
|
| 53 |
}
|
| 54 |
|
|
|
|
| 55 |
trap cleanup SIGINT SIGTERM
|
| 56 |
|
| 57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
|
| 59 |
-
|
| 60 |
-
kill $TUNNEL_PID 2>/dev/null
|
| 61 |
-
wait $TUNNEL_PID 2>/dev/null
|
| 62 |
-
echo "Скрипт завершен."
|
|
|
|
| 1 |
#!/bin/sh
|
| 2 |
+
set -e # Выход при любой ошибке
|
| 3 |
|
| 4 |
+
echo "--- Starting services ---"
|
| 5 |
+
CURRENT_USER=$(whoami)
|
| 6 |
+
CURRENT_UID=$(id -u)
|
| 7 |
+
echo "Script running as user: ${CURRENT_USER} (UID: ${CURRENT_UID})"
|
| 8 |
+
echo "HOME directory: ${HOME}"
|
| 9 |
+
echo "Working directory: $(pwd)"
|
| 10 |
|
| 11 |
+
# Проверка обязательных переменных для Telegram API
|
| 12 |
if [ -z "$TELEGRAM_API_ID" ] || [ -z "$TELEGRAM_API_HASH" ]; then
|
| 13 |
echo "Ошибка: Переменные окружения TELEGRAM_API_ID и TELEGRAM_API_HASH должны быть установлены."
|
|
|
|
| 14 |
exit 1
|
| 15 |
fi
|
| 16 |
|
| 17 |
+
# Проверка переменных для Gist (предупреждение, если не установлены)
|
| 18 |
+
if [ -z "$GITHUB_USERNAME" ] || [ -z "$GITHUB_TOKEN" ] || [ -z "$ENV_GIST_ID" ]; then
|
| 19 |
+
echo "Внимание: GITHUB_USERNAME, GITHUB_TOKEN или ENV_GIST_ID не установлены. Обновление Gist будет пропущено."
|
| 20 |
+
fi
|
| 21 |
+
|
| 22 |
+
# Порты
|
| 23 |
+
TELEGRAM_MAIN_PORT=7860 # Как указано в app_port в README.md
|
| 24 |
+
# EXPRESS_PORT будет взят из окружения Node.js приложения (по умолчанию 3001)
|
| 25 |
|
| 26 |
+
echo "1. Запуск Telegram Bot API на порту ${TELEGRAM_MAIN_PORT}..."
|
| 27 |
+
# Запускаем Telegram Bot API в фоновом режиме
|
| 28 |
+
# Он будет использовать /var/lib/telegram-bot-api, права на которую установлены для appuser
|
| 29 |
telegram-bot-api \
|
| 30 |
--local \
|
| 31 |
--http-port=${TELEGRAM_MAIN_PORT} \
|
| 32 |
+
--http-stat-port=8082 \ # Статистика самого API на неиспользуемом порту, нам она не нужна снаружи
|
| 33 |
+
--http-stat-ip-address=127.0.0.1 \
|
| 34 |
+
--dir=${TELEGRAM_DATA_DIR:-/var/lib/telegram-bot-api} \
|
| 35 |
+
--temp-dir=${TELEGRAM_DATA_DIR:-/var/lib/telegram-bot-api} &
|
| 36 |
|
| 37 |
TELEGRAM_PID=$!
|
| 38 |
echo "Telegram Bot API запущен с PID: $TELEGRAM_PID"
|
| 39 |
|
| 40 |
+
# Небольшая задержка перед запуском Node.js приложения
|
| 41 |
+
sleep 3
|
|
|
|
| 42 |
|
| 43 |
+
echo "2. Запуск Node.js Express приложения (статистика, файлы, Gist)..."
|
| 44 |
+
# Запускаем Node.js приложение в фоновом режиме
|
| 45 |
+
# Оно само запустит туннель для своего порта
|
| 46 |
+
node server.js &
|
| 47 |
+
NODE_APP_PID=$!
|
| 48 |
+
echo "Node.js приложение запущено с PID: $NODE_APP_PID"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
|
| 50 |
+
# Функция для корректного завершения
|
| 51 |
cleanup() {
|
| 52 |
echo "Получен сигнал завершения. Остановка процессов..."
|
| 53 |
+
# Убиваем процессы в обратном порядке их запуска
|
| 54 |
+
if kill -0 $NODE_APP_PID 2>/dev/null; then
|
| 55 |
+
echo "Остановка Node.js приложения (PID: $NODE_APP_PID)..."
|
| 56 |
+
kill $NODE_APP_PID
|
| 57 |
+
fi
|
| 58 |
+
if kill -0 $TELEGRAM_PID 2>/dev/null; then
|
| 59 |
+
echo "Остановка Telegram Bot API (PID: $TELEGRAM_PID)..."
|
| 60 |
+
kill $TELEGRAM_PID
|
| 61 |
+
fi
|
| 62 |
+
# SSH туннель запускается и управляется из Node.js, он должен завершиться при завершении Node.js
|
| 63 |
+
|
| 64 |
+
# Ожидаем завершения фоновых процессов
|
| 65 |
+
wait $NODE_APP_PID 2>/dev/null
|
| 66 |
wait $TELEGRAM_PID 2>/dev/null
|
|
|
|
| 67 |
echo "Процессы остановлены."
|
| 68 |
+
exit 0 # Успешное завершение
|
| 69 |
}
|
| 70 |
|
| 71 |
+
# Перехватываем сигналы SIGINT (Ctrl+C) и SIGTERM
|
| 72 |
trap cleanup SIGINT SIGTERM
|
| 73 |
|
| 74 |
+
# Ожидаем завершения основного процесса (например, Node.js приложения)
|
| 75 |
+
# Если Node.js упадет, то и контейнер должен остановиться.
|
| 76 |
+
# Если Telegram API упадет, Node.js продолжит работать (можно изменить логику, если нужно)
|
| 77 |
+
wait $NODE_APP_PID
|
| 78 |
+
EXIT_CODE=$? # Получаем код выхода Node.js приложения
|
| 79 |
+
|
| 80 |
+
echo "Node.js приложение завершилось с кодом $EXIT_CODE. Завершение работы..."
|
| 81 |
+
# Если Node.js завершился, останавливаем и Telegram API, если он еще работает
|
| 82 |
+
if kill -0 $TELEGRAM_PID 2>/dev/null; then
|
| 83 |
+
kill $TELEGRAM_PID
|
| 84 |
+
wait $TELEGRAM_PID 2>/dev/null
|
| 85 |
+
fi
|
| 86 |
|
| 87 |
+
exit $EXIT_CODE # Выходим с кодом завершения Node.js приложения
|
|
|
|
|
|
|
|
|