Rust Руководство

Автоматический вайп сервера Rust: скрипты, смена seed и очистка данных

Автоматизация вайпов на сервере Rust: скрипт очистки карты и чертежей, генерация случайного сида, бэкапы перед вайпом и планирование по cron.

Автоматический вайп сервера Rust: скрипты, смена seed и очистка данных

Периодический вайп (очистка мира) в Rust — фундаментальный процесс жизненного цикла любого игрового сервера. Регулярный сброс карты устраняет накопившиеся постройки игроков, снижает нагрузку на процессор и диск, а также возвращает равные условия для выживания. Ручной перезапуск с очисткой файлов отнимает время администратора и чреват случайным удалением чертежей или прав доступа.

В этом материале рассматривается различие между вайпом карты и полным сбросом чертежей, структура каталога server.identity, написание отказоустойчивого Bash-скрипта вайпа с ротацией сида и настройка расписания в cron.

Разница между обычным вайпом карты и полным вайпом чертежей#

В сообществе Rust принято разделять два типа очистки:

  1. Map Wipe (вайп карты): Удаляются только физические структуры, базы игроков и сохранённый ландшафт. Изученные чертежи (blueprints) у игроков сохраняются. Проводится обычно раз в неделю или две недели.
  2. Full Wipe / BP Wipe (полный вайп чертежей): Удаляется карта, а также все базы данных изученных рецептов, инвентари и токены игроков. Обязателен в первый четверг каждого месяца при выходе глобального обновления Facepunch.

Ошибочное удаление файлов чертежей в день обычного вайпа карты приводит к оттоку постоянных игроков, поэтому скрипт обязан четко разграничивать эти режимы.

Структура каталога identity и важные файлы базы данных#

Все динамические данные сервера Rust хранятся по пути /opt/rust/server/<server.identity>/:

  • proceduralmap.<size>.<seed>.<version>.sav: файл карты и всех построек игроков (удаляется при вайпе карты).
  • player.blueprints.<version>.db: база данных изученных игроками чертежей (удаляется только при полном вайпе).
  • player.identities.<version>.db и player.tokens.db: привязка учетных записей Steam (удаляются при полном вайпе).
  • player.stats.<version>.db: статистика игроков.
  • cfg/server.cfg: постоянные настройки сервера (сохраняются всегда).
  • cfg/bans.cfg и cfg/users.cfg: списки забаненных игроков и администраторов (сохраняются всегда).

Bash-скрипт автоматизации вайпа со сменой сида#

Создадим скрипт /opt/rust/scripts/wipe.sh, поддерживающий два режима: map и full. Скрипт оповещает игроков по RCON, делает резервную копию, генерирует случайный сид карты и перезапускает службу:

bash
sudo mkdir -p /opt/rust/scripts /opt/rust/backups
sudo nano /opt/rust/scripts/wipe.sh

Вставьте следующий скрипт:

bash
#!/usr/bin/env bash
set -euo pipefail

MODE="${1:-map}"
IDENTITY="my_rust_server"
SERVER_DIR="/opt/rust/server/${IDENTITY}"
BACKUP_DIR="/opt/rust/backups/wipe_$(date +%Y%m%d_%H%M%S)"

echo "[1/6] Sending RCON broadcast..."
rcon -a 127.0.0.1:28016 -p "SuperSecretRconPass" "say Automated wipe starting in 60 seconds!" || true
sleep 60
rcon -a 127.0.0.1:28016 -p "SuperSecretRconPass" "server.save" || true

echo "[2/6] Stopping Rust server..."
systemctl stop rust

echo "[3/6] Archiving existing identity folder..."
mkdir -p "$BACKUP_DIR"
tar -czf "${BACKUP_DIR}/pre_wipe_archive.tar.gz" -C "/opt/rust/server" "${IDENTITY}"

echo "[4/6] Cleaning up data files according to mode: ${MODE}..."
find "$SERVER_DIR" -maxdepth 1 -name "proceduralmap.*.sav" -delete
find "$SERVER_DIR" -maxdepth 1 -name "*.map" -delete

if [ "$MODE" = "full" ]; then
    echo "Full wipe requested. Deleting blueprint and player databases..."
    find "$SERVER_DIR" -maxdepth 1 -name "player.blueprints.*.db" -delete
    find "$SERVER_DIR" -maxdepth 1 -name "player.identities.*.db" -delete
    find "$SERVER_DIR" -maxdepth 1 -name "player.tokens.db" -delete
    find "$SERVER_DIR" -maxdepth 1 -name "player.stats.*.db" -delete
fi

echo "[5/6] Generating new random seed..."
NEW_SEED=$(( (RANDOM << 16) | RANDOM ))
sed -i -E "s/(\+server\.seed )[0-9]+/\1${NEW_SEED}/" /etc/systemd/system/rust.service

echo "[6/6] Reloading systemd and starting Rust with seed ${NEW_SEED}..."
systemctl daemon-reload
systemctl start rust

echo "Wipe completed successfully. Seed: ${NEW_SEED}"

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

bash
sudo chmod +x /opt/rust/scripts/wipe.sh

При использовании облачной панели управления серверами расписание вайпов, ротация сида процедурной генерации и сохранение чертежей автоматизированы через встроенный планировщик задач.

Планирование вайпа через cron и оповещение игроков по RCON#

Откройте системный планировщик crontab от имени суперпользователя:

bash
sudo crontab -e

Настройте расписание:

  • Обычный вайп карты каждый четверг в 19:00 UTC:
  • Полный вайп в первый четверг месяца в 19:00 UTC:
bash
0 19 * * 4 /opt/rust/scripts/wipe.sh map >> /var/log/rust_wipe.log 2>&1

Для ручного запуска вайпа в любой момент достаточно передать нужный аргумент:

bash
sudo /opt/rust/scripts/wipe.sh map

Проверка генерации нового мира и валидация портов#

После старта службы отслеживайте журнал инициализации процедурной генерации карты:

bash
sudo journalctl -u rust -f --no-pager

В выводе должны появиться сообщения о генерации новой карты: Generating Procedural Map [<size>, <new_seed>]Spawning Monuments... DoneServer initialization complete. Map loaded.

Проверьте, что сервер успешно слушает игровой порт UDP 28015 и порт RCON 28016:

bash
sudo ss -ulnp | grep 28015
sudo ss -tlnp | grep 28016

Источники#