From ca565b698c4896c8af769f035609c9091486a202 Mon Sep 17 00:00:00 2001 From: Denis Shatskiy Date: Fri, 11 Jul 2025 17:45:13 +0700 Subject: [PATCH] Enhance logging and error handling in load_prefixes.py and start.sh. The prefix loader now handles file write errors gracefully, while start.sh includes improved permissions setup for log files and named pipes, along with additional checks for ExaBGP process status after startup. --- scripts/load_prefixes.py | 19 ++++++++++----- scripts/start.sh | 52 +++++++++++++++++++++++++++++----------- 2 files changed, 51 insertions(+), 20 deletions(-) diff --git a/scripts/load_prefixes.py b/scripts/load_prefixes.py index c1e5cbc..05a0eae 100644 --- a/scripts/load_prefixes.py +++ b/scripts/load_prefixes.py @@ -24,9 +24,13 @@ def log_message(message: str): # Вывод в stdout для ExaBGP print(log_entry, flush=True) - # Запись в файл - with open(LOG_FILE, "a") as f: - f.write(log_entry + "\n") + # Запись в файл (с обработкой ошибок) + try: + with open(LOG_FILE, "a") as f: + f.write(log_entry + "\n") + except (PermissionError, OSError) as e: + # Если не можем записать в файл, просто выводим в stderr + print(f"Warning: Could not write to log file: {e}", file=sys.stderr, flush=True) def validate_prefix(prefix: str) -> bool: """Валидация IP префикса""" @@ -123,6 +127,12 @@ def withdraw_prefixes(prefixes: Set[str]): def main(): """Основная функция""" + # Создание директории для логов в начале + try: + os.makedirs(os.path.dirname(LOG_FILE), exist_ok=True) + except (PermissionError, OSError): + pass # Игнорируем ошибки создания директории + # Проверка тестового режима if len(sys.argv) > 1 and sys.argv[1] == '--test': print("Testing prefix loader...") @@ -132,9 +142,6 @@ def main(): log_message("Starting prefix loader...") - # Создание директории для логов - os.makedirs(os.path.dirname(LOG_FILE), exist_ok=True) - # Загрузка префиксов prefixes = load_all_prefixes() log_message(f"Total prefixes loaded: {len(prefixes)}") diff --git a/scripts/start.sh b/scripts/start.sh index 6c7fac0..1f4575f 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -12,21 +12,31 @@ mkdir -p /app/run mkdir -p /run/exabgp mkdir -p /app/data +# Установка правильных прав доступа +chmod 755 /app/logs +chmod 755 /app/run +chmod 755 /run/exabgp +chmod 755 /app/data + +# Удаление старых named pipes если они существуют +echo "Cleaning up old named pipes..." +rm -f /run/exabgp/exabgp.in /run/exabgp/exabgp.out +rm -f /var/run/exabgp/exabgp.in /var/run/exabgp/exabgp.out +rm -f /usr/local/run/exabgp/exabgp.in /usr/local/run/exabgp/exabgp.out +rm -f /usr/local/var/run/exabgp/exabgp.in /usr/local/var/run/exabgp/exabgp.out + # Создание named pipes для CLI в стандартном месте -if [ ! -p "/run/exabgp/exabgp.in" ] || [ ! -p "/run/exabgp/exabgp.out" ]; then - echo "Creating named pipes for ExaBGP CLI..." - mkfifo /run/exabgp/exabgp.in /run/exabgp/exabgp.out - chmod 600 /run/exabgp/exabgp.in /run/exabgp/exabgp.out -fi +echo "Creating named pipes for ExaBGP CLI..." +mkdir -p /run/exabgp +mkfifo /run/exabgp/exabgp.in /run/exabgp/exabgp.out +chmod 666 /run/exabgp/exabgp.in /run/exabgp/exabgp.out # Также создаем в других стандартных местах for dir in /var/run/exabgp /usr/local/run/exabgp /usr/local/var/run/exabgp; do mkdir -p $dir - if [ ! -p "$dir/exabgp.in" ] || [ ! -p "$dir/exabgp.out" ]; then - echo "Creating named pipes in $dir..." - mkfifo $dir/exabgp.in $dir/exabgp.out - chmod 600 $dir/exabgp.in $dir/exabgp.out - fi + echo "Creating named pipes in $dir..." + mkfifo $dir/exabgp.in $dir/exabgp.out + chmod 666 $dir/exabgp.in $dir/exabgp.out done # Проверка наличия файлов с префиксами @@ -36,6 +46,13 @@ if [ ! -f "/app/data/prefixes.txt" ]; then echo "192.168.1.0/24" >> /app/data/prefixes.txt fi +# Создание лог-файлов с правильными правами +echo "Creating log files with proper permissions..." +touch /app/logs/prefixes.log +touch /app/logs/exabgp.log +chmod 666 /app/logs/prefixes.log +chmod 666 /app/logs/exabgp.log + echo "Prefixes file content:" cat /app/data/prefixes.txt echo "---" @@ -123,22 +140,29 @@ fi # Запуск ExaBGP с правильными параметрами cd /app +echo "Starting ExaBGP in background..." + +# Запуск ExaBGP в фоновом режиме if [ -n "$LOG_LEVEL" ]; then - exabgp --log.level $LOG_LEVEL /app/exabgp.conf > /app/logs/exabgp.log 2>&1 & + nohup exabgp --log.level $LOG_LEVEL /app/exabgp.conf > /app/logs/exabgp.log 2>&1 & else - exabgp /app/exabgp.conf > /app/logs/exabgp.log 2>&1 & + nohup exabgp /app/exabgp.conf > /app/logs/exabgp.log 2>&1 & fi EXABGP_PID=$! # Проверяем что процесс запустился -sleep 3 +sleep 5 +echo "Checking if ExaBGP process is running..." +ps aux | grep exabgp | grep -v grep || echo "No exabgp process found in ps" + if ! kill -0 $EXABGP_PID 2>/dev/null; then echo "Failed to start ExaBGP. Checking logs:" cat /app/logs/exabgp.log echo "Trying to run ExaBGP directly for diagnosis:" exabgp --version echo "---" - exabgp /app/exabgp.conf + echo "Direct execution test:" + timeout 10 exabgp /app/exabgp.conf || echo "Direct execution completed" exit 1 fi