Настройка автозапуска и восстановления Bedrock сервера

Материал из ARK-HOSTER.RU | Документация хостинга
Версия от 10:17, 3 ноября 2025; Admin (обсуждение | вклад) (Новая страница: «= Настройка автозапуска и восстановления Bedrock сервера = == 1. Подготовка системы == * Войдит…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Содержание

Настройка автозапуска и восстановления Bedrock сервера

1. Подготовка системы

  • Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
  • Убедитесь, что Bedrock сервер установлен на Ubuntu 24.04 LTS.
  • Проверьте, что systemd установлен и работает.
  • Рекомендуется использовать systemd для управления сервисом.

2. Настройка systemd сервиса

Создание сервиса

1. Создайте файл сервиса:

sudo nano /etc/systemd/system/minecraft-bedrock.service

2. Добавьте конфигурацию:

[Unit]
Description=Minecraft Bedrock Server
After=network.target
Wants=network-online.target

[Service]
Type=simple
User=bedrock
Group=bedrock
WorkingDirectory=/opt/bedrock
ExecStart=/opt/bedrock/bedrock_server
ExecStop=/bin/kill -15 $MAINPID
Restart=always
RestartSec=10
StartLimitInterval=0

\# Логирование
StandardOutput=journal
StandardError=journal
SyslogIdentifier=minecraft-bedrock

\# Ограничения ресурсов
LimitNOFILE=65536
LimitNPROC=32768

\# Ограничения памяти (опционально)
MemoryMax=8G
MemoryHigh=6G

\# Таймауты
TimeoutStartSec=300
TimeoutStopSec=60

[Install]
WantedBy=multi-user.target

3. Перезагрузите systemd:

sudo systemctl daemon-reload

Включение автозапуска

1. Включите автозапуск:

sudo systemctl enable minecraft-bedrock

2. Проверьте статус:

sudo systemctl status minecraft-bedrock

3. Запустите сервис:

sudo systemctl start minecraft-bedrock

3. Настройка автоматического перезапуска

Параметры Restart

1. Отредактируйте сервис:

sudo nano /etc/systemd/system/minecraft-bedrock.service

2. Настройте параметры перезапуска:

[Service]
\# Всегда перезапускать при сбое
Restart=always

\# Ждать 10 секунд перед перезапуском
RestartSec=10

\# Без ограничений на количество перезапусков
StartLimitInterval=0
StartLimitBurst=0

3. Примените изменения:

sudo systemctl daemon-reload
sudo systemctl restart minecraft-bedrock

Варианты Restart

1. always - всегда перезапускать:

Restart=always

2. on-failure - перезапускать только при ошибке:

Restart=on-failure
RestartSec=10

3. on-abnormal - перезапускать при аварийном завершении:

Restart=on-abnormal

4. no - не перезапускать автоматически:

Restart=no

4. Создание скрипта мониторинга и восстановления

Базовый скрипт мониторинга

1. Создайте скрипт:

sudo nano /usr/local/bin/bedrock-watchdog.sh

2. Добавьте содержимое:

\#!/bin/bash

SERVICE_NAME="minecraft-bedrock"
LOG_FILE="/var/log/bedrock-watchdog.log"
MAX_RESTARTS=5
RESTART_INTERVAL=300

log_message() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

\# Проверка статуса сервиса
if ! systemctl is-active --quiet "$SERVICE_NAME"; then
    log_message "Service $SERVICE_NAME is not running. Attempting to start..."
    
    \# Проверка количества перезапусков
    RESTART_COUNT=$(grep -c "Attempting to start" "$LOG_FILE" | tail -1)
    
    if [ "$RESTART_COUNT" -lt "$MAX_RESTARTS" ]; then
        systemctl start "$SERVICE_NAME"
        sleep 5
        
        if systemctl is-active --quiet "$SERVICE_NAME"; then
            log_message "Service $SERVICE_NAME started successfully"
        else
            log_message "Failed to start $SERVICE_NAME"
        fi
    else
        log_message "Maximum restart attempts reached. Stopping watchdog."
        exit 1
    fi
else
    \# Проверка доступности порта
    if ! nc -u -z localhost 19132 2>/dev/null; then
        log_message "Port 19132 is not accessible. Restarting service..."
        systemctl restart "$SERVICE_NAME"
        sleep 5
    fi
fi

3. Сделайте исполняемым:

sudo chmod +x /usr/local/bin/bedrock-watchdog.sh

4. Добавьте в cron (каждые 5 минут):

sudo crontab -e

5. Добавьте задачу:

*/5 * * * * /usr/local/bin/bedrock-watchdog.sh

Расширенный скрипт мониторинга

1. Создайте расширенный скрипт:

sudo nano /usr/local/bin/bedrock-watchdog-advanced.sh

2. Добавьте содержимое:

\#!/bin/bash

SERVICE_NAME="minecraft-bedrock"
LOG_FILE="/var/log/bedrock-watchdog.log"
PID_FILE="/var/run/bedrock-watchdog.pid"
CHECK_INTERVAL=60

\# Проверка, что скрипт не запущен дважды
if [ -f "$PID_FILE" ]; then
    OLD_PID=$(cat "$PID_FILE")
    if ps -p "$OLD_PID" > /dev/null 2>&1; then
        echo "Watchdog already running (PID: $OLD_PID)"
        exit 1
    fi
fi

echo $$ > "$PID_FILE"

log_message() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

cleanup() {
    rm -f "$PID_FILE"
    exit 0
}

trap cleanup SIGTERM SIGINT

log_message "Bedrock watchdog started"

while true; do
    \# Проверка статуса сервиса
    if ! systemctl is-active --quiet "$SERVICE_NAME"; then
        log_message "Service $SERVICE_NAME is down. Restarting..."
        systemctl restart "$SERVICE_NAME"
        sleep 10
        
        if systemctl is-active --quiet "$SERVICE_NAME"; then
            log_message "Service restarted successfully"
        else
            log_message "Failed to restart service. Attempting recovery..."
            
            \# Попытка восстановления
            systemctl stop "$SERVICE_NAME"
            sleep 5
            systemctl start "$SERVICE_NAME"
            sleep 10
            
            if ! systemctl is-active --quiet "$SERVICE_NAME"; then
                log_message "CRITICAL: Service recovery failed!"
            fi
        fi
    else
        \# Проверка доступности порта
        if ! timeout 2 nc -u -z localhost 19132 2>/dev/null; then
            log_message "Port 19132 is not accessible. Restarting service..."
            systemctl restart "$SERVICE_NAME"
        fi
        
        \# Проверка использования памяти
        PID=$(systemctl show -p MainPID "$SERVICE_NAME" --value)
        if [ ! -z "$PID" ] && [ "$PID" != "0" ]; then
            MEMORY_MB=$(ps -o rss= -p "$PID" | awk '{print $1/1024}')
            if (( $(echo "$MEMORY_MB > 6144" | bc -l) )); then
                log_message "WARNING: High memory usage: ${MEMORY_MB}MB"
            fi
        fi
    fi
    
    sleep "$CHECK_INTERVAL"
done

3. Сделайте исполняемым:

sudo chmod +x /usr/local/bin/bedrock-watchdog-advanced.sh

4. Создайте systemd сервис для watchdog:

sudo nano /etc/systemd/system/bedrock-watchdog.service

5. Добавьте конфигурацию:

[Unit]
Description=Bedrock Server Watchdog
After=network.target minecraft-bedrock.service

[Service]
Type=simple
ExecStart=/usr/local/bin/bedrock-watchdog-advanced.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

6. Запустите watchdog:

sudo systemctl daemon-reload
sudo systemctl enable bedrock-watchdog
sudo systemctl start bedrock-watchdog

5. Настройка автоматического восстановления после перезагрузки

Проверка автозапуска

1. Проверьте, что сервис включен:

sudo systemctl is-enabled minecraft-bedrock

2. Если не включен, включите:

sudo systemctl enable minecraft-bedrock

Тестирование автозапуска

1. Перезагрузите сервер:

sudo reboot

2. После перезагрузки проверьте статус:

sudo systemctl status minecraft-bedrock

3. Проверьте логи:

sudo journalctl -u minecraft-bedrock -b

6. Настройка зависимостей

Зависимости от сети

1. Отредактируйте сервис:

sudo nano /etc/systemd/system/minecraft-bedrock.service

2. Добавьте зависимости:

[Unit]
After=network.target
Wants=network-online.target

[Service]
\# Ждать доступности сети
ExecStartPre=/bin/sleep 5

Зависимости от других сервисов

1. Пример с зависимостью от базы данных:

[Unit]
After=network.target mysql.service
Requires=mysql.service

7. Логирование и мониторинг

Настройка журналирования

1. Настройте ротацию логов:

sudo nano /etc/systemd/system/minecraft-bedrock.service

2. Добавьте настройки логирования:

[Service]
StandardOutput=journal
StandardError=journal
SyslogIdentifier=minecraft-bedrock

Просмотр логов

1. Просмотр логов сервиса:

sudo journalctl -u minecraft-bedrock -f

2. Просмотр логов за последний час:

sudo journalctl -u minecraft-bedrock --since "1 hour ago"

3. Просмотр логов после последней перезагрузки:

sudo journalctl -u minecraft-bedrock -b

8. Создание скрипта восстановления состояния =

Скрипт предзапуска

1. Создайте скрипт:

sudo nano /usr/local/bin/bedrock-pre-start.sh

2. Добавьте содержимое:

\#!/bin/bash

SERVER_DIR="/opt/bedrock"
LOG_FILE="/var/log/bedrock-pre-start.log"

log_message() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

log_message "Running pre-start checks..."

\# Проверка директории сервера
if [ ! -d "$SERVER_DIR" ]; then
    log_message "ERROR: Server directory not found: $SERVER_DIR"
    exit 1
fi

\# Проверка исполняемого файла
if [ ! -f "$SERVER_DIR/bedrock_server" ]; then
    log_message "ERROR: bedrock_server not found"
    exit 1
fi

\# Проверка прав доступа
if [ ! -r "$SERVER_DIR/server.properties" ]; then
    log_message "WARNING: Cannot read server.properties"
fi

\# Проверка свободного места
AVAILABLE_SPACE=$(df "$SERVER_DIR" | tail -1 | awk '{print $4}')
if [ "$AVAILABLE_SPACE" -lt 1048576 ]; then
    log_message "WARNING: Low disk space: ${AVAILABLE_SPACE}KB"
fi

log_message "Pre-start checks completed"

3. Сделайте исполняемым:

sudo chmod +x /usr/local/bin/bedrock-pre-start.sh

4. Добавьте в сервис:

[Service]
ExecStartPre=/usr/local/bin/bedrock-pre-start.sh

9. Устранение неполадок

Проблемы с автозапуском

1. Сервис не запускается автоматически:

sudo systemctl enable minecraft-bedrock
sudo systemctl status minecraft-bedrock

2. Сервис падает сразу после запуска:

sudo journalctl -u minecraft-bedrock -n 50
  • Проверьте логи на ошибки
  • Проверьте права доступа
  • Проверьте конфигурационные файлы

3. Слишком частые перезапуски:

  • Увеличьте `RestartSec`
  • Проверьте причину падений в логах

Диагностика проблем

1. Проверка статуса:

sudo systemctl status minecraft-bedrock

2. Проверка логов:

sudo journalctl -u minecraft-bedrock -f

3. Проверка процессов:

ps aux | grep bedrock_server

4. Проверка портов:

sudo netstat -ulnp | grep 19132

10. Примеры конфигураций

Конфигурация для продакшн

[Unit]
Description=Minecraft Bedrock Server
After=network.target
Wants=network-online.target

[Service]
Type=simple
User=bedrock
Group=bedrock
WorkingDirectory=/opt/bedrock
ExecStartPre=/usr/local/bin/bedrock-pre-start.sh
ExecStart=/opt/bedrock/bedrock_server
ExecStop=/bin/kill -15 $MAINPID
Restart=always
RestartSec=10
StartLimitInterval=0

StandardOutput=journal
StandardError=journal
SyslogIdentifier=minecraft-bedrock

LimitNOFILE=65536
LimitNPROC=32768
MemoryMax=8G
MemoryHigh=6G

TimeoutStartSec=300
TimeoutStopSec=60

[Install]
WantedBy=multi-user.target

Заключение

Настройка автозапуска и восстановления Bedrock сервера на Ubuntu 24.04 обеспечивает высокую надежность работы сервера. Правильная конфигурация systemd и мониторинг гарантируют автоматическое восстановление после сбоев.

Для размещения ваших Bedrock серверов с автоматическим восстановлением на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):

Наши специалисты помогут с настройкой автозапуска и восстановления Bedrock серверов!