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
Build and Push Docker Image / build (push) Successful in 3m24s
This commit is contained in:
@@ -24,9 +24,13 @@ def log_message(message: str):
|
|||||||
# Вывод в stdout для ExaBGP
|
# Вывод в stdout для ExaBGP
|
||||||
print(log_entry, flush=True)
|
print(log_entry, flush=True)
|
||||||
|
|
||||||
# Запись в файл
|
# Запись в файл (с обработкой ошибок)
|
||||||
with open(LOG_FILE, "a") as f:
|
try:
|
||||||
f.write(log_entry + "\n")
|
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:
|
def validate_prefix(prefix: str) -> bool:
|
||||||
"""Валидация IP префикса"""
|
"""Валидация IP префикса"""
|
||||||
@@ -123,6 +127,12 @@ def withdraw_prefixes(prefixes: Set[str]):
|
|||||||
|
|
||||||
def main():
|
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':
|
if len(sys.argv) > 1 and sys.argv[1] == '--test':
|
||||||
print("Testing prefix loader...")
|
print("Testing prefix loader...")
|
||||||
@@ -132,9 +142,6 @@ def main():
|
|||||||
|
|
||||||
log_message("Starting prefix loader...")
|
log_message("Starting prefix loader...")
|
||||||
|
|
||||||
# Создание директории для логов
|
|
||||||
os.makedirs(os.path.dirname(LOG_FILE), exist_ok=True)
|
|
||||||
|
|
||||||
# Загрузка префиксов
|
# Загрузка префиксов
|
||||||
prefixes = load_all_prefixes()
|
prefixes = load_all_prefixes()
|
||||||
log_message(f"Total prefixes loaded: {len(prefixes)}")
|
log_message(f"Total prefixes loaded: {len(prefixes)}")
|
||||||
|
|||||||
+38
-14
@@ -12,21 +12,31 @@ mkdir -p /app/run
|
|||||||
mkdir -p /run/exabgp
|
mkdir -p /run/exabgp
|
||||||
mkdir -p /app/data
|
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 в стандартном месте
|
# Создание named pipes для CLI в стандартном месте
|
||||||
if [ ! -p "/run/exabgp/exabgp.in" ] || [ ! -p "/run/exabgp/exabgp.out" ]; then
|
echo "Creating named pipes for ExaBGP CLI..."
|
||||||
echo "Creating named pipes for ExaBGP CLI..."
|
mkdir -p /run/exabgp
|
||||||
mkfifo /run/exabgp/exabgp.in /run/exabgp/exabgp.out
|
mkfifo /run/exabgp/exabgp.in /run/exabgp/exabgp.out
|
||||||
chmod 600 /run/exabgp/exabgp.in /run/exabgp/exabgp.out
|
chmod 666 /run/exabgp/exabgp.in /run/exabgp/exabgp.out
|
||||||
fi
|
|
||||||
|
|
||||||
# Также создаем в других стандартных местах
|
# Также создаем в других стандартных местах
|
||||||
for dir in /var/run/exabgp /usr/local/run/exabgp /usr/local/var/run/exabgp; do
|
for dir in /var/run/exabgp /usr/local/run/exabgp /usr/local/var/run/exabgp; do
|
||||||
mkdir -p $dir
|
mkdir -p $dir
|
||||||
if [ ! -p "$dir/exabgp.in" ] || [ ! -p "$dir/exabgp.out" ]; then
|
echo "Creating named pipes in $dir..."
|
||||||
echo "Creating named pipes in $dir..."
|
mkfifo $dir/exabgp.in $dir/exabgp.out
|
||||||
mkfifo $dir/exabgp.in $dir/exabgp.out
|
chmod 666 $dir/exabgp.in $dir/exabgp.out
|
||||||
chmod 600 $dir/exabgp.in $dir/exabgp.out
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
# Проверка наличия файлов с префиксами
|
# Проверка наличия файлов с префиксами
|
||||||
@@ -36,6 +46,13 @@ if [ ! -f "/app/data/prefixes.txt" ]; then
|
|||||||
echo "192.168.1.0/24" >> /app/data/prefixes.txt
|
echo "192.168.1.0/24" >> /app/data/prefixes.txt
|
||||||
fi
|
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:"
|
echo "Prefixes file content:"
|
||||||
cat /app/data/prefixes.txt
|
cat /app/data/prefixes.txt
|
||||||
echo "---"
|
echo "---"
|
||||||
@@ -123,22 +140,29 @@ fi
|
|||||||
|
|
||||||
# Запуск ExaBGP с правильными параметрами
|
# Запуск ExaBGP с правильными параметрами
|
||||||
cd /app
|
cd /app
|
||||||
|
echo "Starting ExaBGP in background..."
|
||||||
|
|
||||||
|
# Запуск ExaBGP в фоновом режиме
|
||||||
if [ -n "$LOG_LEVEL" ]; then
|
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
|
else
|
||||||
exabgp /app/exabgp.conf > /app/logs/exabgp.log 2>&1 &
|
nohup exabgp /app/exabgp.conf > /app/logs/exabgp.log 2>&1 &
|
||||||
fi
|
fi
|
||||||
EXABGP_PID=$!
|
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
|
if ! kill -0 $EXABGP_PID 2>/dev/null; then
|
||||||
echo "Failed to start ExaBGP. Checking logs:"
|
echo "Failed to start ExaBGP. Checking logs:"
|
||||||
cat /app/logs/exabgp.log
|
cat /app/logs/exabgp.log
|
||||||
echo "Trying to run ExaBGP directly for diagnosis:"
|
echo "Trying to run ExaBGP directly for diagnosis:"
|
||||||
exabgp --version
|
exabgp --version
|
||||||
echo "---"
|
echo "---"
|
||||||
exabgp /app/exabgp.conf
|
echo "Direct execution test:"
|
||||||
|
timeout 10 exabgp /app/exabgp.conf || echo "Direct execution completed"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user