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.
Build and Push Docker Image / build (push) Successful in 3m24s

This commit is contained in:
2025-07-11 17:45:13 +07:00
parent 063c85e4c1
commit ca565b698c
2 changed files with 51 additions and 20 deletions
+13 -6
View File
@@ -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)}")
+38 -14
View File
@@ -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