#!/bin/bash set -euo pipefail REPO_URL="https://gitea.creative-tg1.ru/CREATIVE_tg1/server-bot-python.git" DEPLOY_DIR="/opt/server-bot-python" VENV_DIR="$DEPLOY_DIR/venv" GREEN='\033[0;32m'; RED='\033[0;31m'; NC='\033[0m' log_info() { echo -e "${GREEN}[INFO] $*${NC}"; } log_error() { echo -e "${RED}[ERROR] $*${NC}" >&2; } is_valid_token() { [[ "$1" =~ ^[0-9]+:[a-zA-Z0-9_-]{35,}$ ]] } # ... (блоки установки git/python/venv, см. предыдущий вариант) ... TOKEN=""; USER_ID=""; EXEC_USER=$(logname 2>/dev/null || echo root) while [[ $# -gt 0 ]]; do case $1 in --token) TOKEN="$2"; shift 2 ;; --user_id) USER_ID="$2"; shift 2 ;; --user) EXEC_USER="$2"; shift 2 ;; *) log_error "Неизвестный параметр $1"; exit 1 ;; esac done if [[ -z "$TOKEN" ]]; then read -erp "Введите TOKEN: " TOKEN fi if [[ -z "$USER_ID" ]]; then read -erp "Введите USER_ID: " USER_ID fi # Trim spaces TOKEN="$(echo -n "$TOKEN" | tr -d '[:space:]')" if ! is_valid_token "$TOKEN"; then log_error "НЕКОРРЕКТНЫЙ ФОРМАТ TELEGRAM Токена! Получено: '$TOKEN'" log_error "Он должен быть похож на 123456789:ABCdefghijKLMNOPQRSTUVWXYZ1234567890abc" exit 2 fi if [ ! -d "$DEPLOY_DIR/.git" ]; then log_info "Клонирую репозиторий $REPO_URL в $DEPLOY_DIR" git clone "$REPO_URL" "$DEPLOY_DIR" else log_info "Репозиторий уже существует. Обновляю..." cd "$DEPLOY_DIR" git pull --rebase cd - fi chown -R "$EXEC_USER":"$EXEC_USER" "$DEPLOY_DIR" if [[ ! -f "$DEPLOY_DIR/requirements.txt" ]]; then log_error "Файл requirements.txt не найден в $DEPLOY_DIR!"; exit 1 fi if [[ ! -d "$VENV_DIR" ]]; then log_info "Создаю venv..." sudo -u "$EXEC_USER" python3 -m venv "$VENV_DIR" fi log_info "Устанавливаю зависимости Python..." sudo -u "$EXEC_USER" "$VENV_DIR/bin/pip" install --upgrade pip sudo -u "$EXEC_USER" "$VENV_DIR/bin/pip" install -r "$DEPLOY_DIR/requirements.txt" SERVICE_FILE="/etc/systemd/system/server-bot-python.service" cat < "$SERVICE_FILE" [Unit] Description=Server Bot Python After=network.target [Service] Type=simple WorkingDirectory=$DEPLOY_DIR ExecStart=$VENV_DIR/bin/python -m src.main --token '$TOKEN' --user_id '$USER_ID' Restart=always User=$EXEC_USER [Install] WantedBy=multi-user.target EOL log_info "Обновляю и запускаю systemd unit..." systemctl daemon-reload systemctl enable server-bot-python.service systemctl restart server-bot-python.service # ---------- КОНТРОЛЬ СТАРТА ----------- sleep 2 status_out=$(systemctl is-active server-bot-python.service) if [ "$status_out" = "active" ]; then log_info "Сервис успешно запустился!" else log_error "Сервис после запуска не в состоянии 'active'. Вот последние строки лога:" journalctl -u server-bot-python.service --no-pager -n 20 | tee /dev/stderr exit 10 fi log_info "Успешно! Логи сервиса:" echo "journalctl -u server-bot-python -f"