telegram-cli-bot/install-systemd-service.sh

117 lines
4.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Скрипт установки systemd сервиса для Telegram CLI Bot
set -e
# Используем SUDO_USER если скрипт запущен через sudo, иначе текущего пользователя
BOT_USER="${SUDO_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 через source ~/.bashrc
QWEN_PATH=$(sudo -u "$BOT_USER" bash -c "source /home/$BOT_USER/.bashrc 2>/dev/null; which qwen" 2>/dev/null || echo "")
if [ -z "$QWEN_PATH" ]; then
echo "⚠️ qwen не найден. Установите: npm install -g @qwen-code/qwen-code"
fi
# Определяем Node.js путь (для nvm) - через source ~/.bashrc
NODE_BIN=$(sudo -u "$BOT_USER" bash -c "source /home/$BOT_USER/.bashrc 2>/dev/null; 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="/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 - Логи за сегодня"