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