#!/bin/bash # Скрипт установки systemd сервиса для Telegram CLI Bot set -e BOT_USER="${BOT_USER:-$USER}" BOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BOT_VENV="${BOT_DIR}/venv" SERVICE_FILE="${BOT_DIR}/telegram-bot.service" SYSTEMD_SERVICE="/etc/systemd/system/telegram-bot.service" echo "🔧 Установка systemd сервиса для Telegram CLI Bot" echo "==================================================" echo "Пользователь: $BOT_USER" echo "Директория: $BOT_DIR" echo "Venv: $BOT_VENV" echo "" # Проверка что скрипт запущен от root или через sudo if [ "$EUID" -ne 0 ]; then echo "❌ Запустите скрипт от имени root (sudo ./install-systemd-service.sh)" exit 1 fi # Проверка существования файлов if [ ! -f "$BOT_DIR/bot.py" ]; then echo "❌ bot.py не найден в $BOT_DIR" exit 1 fi if [ ! -f "$BOT_VENV/bin/python" ]; then echo "❌ Venv не найден в $BOT_VENV" echo " Запустите: source $BOT_DIR/venv/bin/activate && pip install -r requirements.txt" exit 1 fi if [ ! -f "$BOT_DIR/.env" ]; then echo "⚠️ .env файл не найден. Создайте его:" echo " cp $BOT_DIR/.env.example $BOT_DIR/.env" echo " и отредактируйте переменные окружения" exit 1 fi # Определяем путь к qwen QWEN_PATH=$(sudo -u "$BOT_USER" which qwen 2>/dev/null || echo "") if [ -z "$QWEN_PATH" ]; then echo "⚠️ qwen не найден. Установите: npm install -g @qwen-code/qwen-code" fi # Определяем Node.js путь (для nvm) - динамически через whereis NODE_BIN=$(sudo -u "$BOT_USER" which node 2>/dev/null || echo "") if [ -n "$NODE_BIN" ]; then NODE_PATH=$(dirname "$NODE_BIN") # Извлекаем базовый путь nvm (убираем /bin/node) NVM_BASE=$(dirname "$NODE_PATH") else # Fallback: стандартные пути NVM_BASE="/home/$BOT_USER/.config/nvm/versions/node" NODE_PATH="$NVM_BASE/current/bin" fi NVM_DIR=$(sudo -u "$BOT_USER" bash -c 'echo $NVM_DIR' 2>/dev/null || echo "/home/$BOT_USER/.nvm") echo "📝 Создание systemd сервиса..." echo " Node путь: $NODE_PATH" echo " NVM база: $NVM_BASE" # Вычисляем NODE_LIB_DIR из NODE_PATH NODE_LIB_DIR=$(dirname "$NODE_PATH")/lib/node_modules # Создаём сервис с подстановкой путей cat > "$SYSTEMD_SERVICE" << EOF [Unit] Description=Telegram CLI Bot After=network.target [Service] Type=simple User=$BOT_USER WorkingDirectory=$BOT_DIR Environment="PATH=$NODE_PATH:$BOT_VENV/bin:/home/$BOT_USER/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Environment="NVM_DIR=$NVM_DIR" Environment="NODE_PATH=$NODE_LIB_DIR" ExecStart=$BOT_VENV/bin/python bot.py Restart=always RestartSec=10 StandardOutput=journal StandardError=journal SyslogIdentifier=telegram-bot [Install] WantedBy=multi-user.target EOF echo "✅ Сервис установлен в $SYSTEMD_SERVICE" # Перезагружаем systemd и включаем сервис echo "🔄 Перезагрузка systemd..." systemctl daemon-reload echo "🚀 Включение сервиса..." systemctl enable telegram-bot echo "" echo "✅ Установка завершена!" echo "" echo "Управление сервисом:" echo " sudo systemctl start telegram-bot - Запустить бота" echo " sudo systemctl stop telegram-bot - Остановить бота" echo " sudo systemctl restart telegram-bot - Перезапустить бота" echo " sudo systemctl status telegram-bot - Проверить статус" echo "" echo "Просмотр логов:" echo " sudo journalctl -u telegram-bot -f - Логи в реальном времени" echo " sudo journalctl -u telegram-bot --since today - Логи за сегодня"