Настройка автозапуска и восстановления Bedrock сервера
Содержание
- 1 Настройка автозапуска и восстановления Bedrock сервера
- 1.1 1. Подготовка системы
- 1.2 2. Настройка systemd сервиса
- 1.3 3. Настройка автоматического перезапуска
- 1.4 4. Создание скрипта мониторинга и восстановления
- 1.5 5. Настройка автоматического восстановления после перезагрузки
- 1.6 6. Настройка зависимостей
- 1.7 7. Логирование и мониторинг
- 1.8 8. Создание скрипта восстановления состояния =
- 1.9 9. Устранение неполадок
- 1.10 10. Примеры конфигураций
- 1.11 Заключение
Настройка автозапуска и восстановления 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):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для высоконагруженных Bedrock серверов
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних серверов
Наши специалисты помогут с настройкой автозапуска и восстановления Bedrock серверов!