Files
2026-08-30 12:06:42 +03:00

125 lines
4.5 KiB
Bash

#!/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 "=== ЗАВЕРШЕНИЕ ==="