#!/bin/bash # Директория со скриптами SCRIPTS_DIR="/opt/testbot-git" # Активация виртуального окружения VENV_ACTIVATE="$SCRIPTS_DIR/venv/bin/activate" # Список скриптов для запуска в порядке выполнения # Legacy prefetch (не в пайплайне): tools/legacy/evt_prefetch.py # SCRIPTS=("vk_load.py" "zk_load.py" "db_update_shortname.py" "tools/legacy/evt_prefetch.py" "tg_publish.py" "evtg_publish.py") # SCRIPTS=("vk_load.py" "zk_load.py" "db_update_shortname.py" "tg_publish.py" "evtg_publish.py") SCRIPTS=("vk_load.py" "zk_load.py" "db_update_shortname.py" "tg_publish.py") # Интервалы между скриптами (в секундах) # DELAYS=(2 2 2 2 30) DELAYS=(2 2 2) # Лог-файл LOG_DIR="$SCRIPTS_DIR/logs" LOG_FILE="$LOG_DIR/runner.log" # Функция для логирования log_message() { local message="$1" echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" | tee -a "$LOG_FILE" } # Проверка и настройка лог-файла setup_logfile() { if [ ! -d "$LOG_DIR" ]; then if ! mkdir -p "$LOG_DIR" 2>/dev/null; then if sudo mkdir -p "$LOG_DIR" 2>/dev/null; then sudo chown "$(whoami)" "$LOG_DIR" sudo chmod 755 "$LOG_DIR" else echo "ОШИБКА: Не удалось создать каталог $LOG_DIR!" exit 1 fi fi fi if [ ! -f "$LOG_FILE" ]; then if ! touch "$LOG_FILE" 2>/dev/null; then if sudo touch "$LOG_FILE" 2>/dev/null; then sudo chown $(whoami) "$LOG_FILE" sudo chmod 644 "$LOG_FILE" log_message "Создан лог-файл с помощью sudo: $LOG_FILE" else echo "ОШИБКА: Не удалось создать лог-файл $LOG_FILE!" exit 1 fi fi fi if [ ! -w "$LOG_FILE" ]; then if sudo chown $(whoami) "$LOG_FILE" 2>/dev/null || chmod 644 "$LOG_FILE" 2>/dev/null; then log_message "Изменены права на лог-файл: $LOG_FILE" else echo "ОШИБКА: Нет прав на запись в $LOG_FILE!" exit 1 fi fi } # Настройка лог-файла setup_logfile log_message "=== ЗАПУСК СКРИПТА ===" log_message "Пользователь: $(whoami)" log_message "Директория со скриптами: $SCRIPTS_DIR" # Проверка существования директории if [ ! -d "$SCRIPTS_DIR" ]; then log_message "ОШИБКА: Директория $SCRIPTS_DIR не существует!" exit 1 fi # Активация виртуального окружения if [ -f "$VENV_ACTIVATE" ]; then source "$VENV_ACTIVATE" log_message "Активировано виртуальное окружение: $VENV_ACTIVATE" else log_message "ОШИБКА: Файл активации venv $VENV_ACTIVATE не найден!" exit 1 fi # Переход в директорию со скриптами cd "$SCRIPTS_DIR" || { log_message "ОШИБКА: Не удалось перейти в $SCRIPTS_DIR" exit 1 } # Запуск скриптов for i in "${!SCRIPTS[@]}"; do script="${SCRIPTS[i]}" # Проверка существования скрипта if [ ! -f "$script" ]; then log_message "ПРЕДУПРЕЖДЕНИЕ: Скрипт $script не найден, пропускаем." continue fi log_message "Запуск скрипта: $script" # Запуск Python-скрипта с записью вывода в лог if python3 "$script" >> "$LOG_FILE" 2>&1; then log_message "УСПЕХ: Скрипт $script завершился успешно." else exit_code=$? log_message "ОШИБКА: Скрипт $script завершился с ошибкой (код: $exit_code)!" log_message "=== ЗАВЕРШЕНИЕ С ОШИБКОЙ ===" exit $exit_code fi # Пауза после скрипта (кроме последнего) if [ $i -lt $((${#SCRIPTS[@]} - 1)) ]; then delay="${DELAYS[i]}" log_message "Ожидание $delay секунд перед следующим скриптом..." sleep $delay fi done log_message "ВСЕ СКРИПТЫ ВЫПОЛНЕНЫ УСПЕШНО!" log_message "=== ЗАВЕРШЕНИЕ ==="