Planifiez un redémarrage de serveur Rust

Les serveurs Rust accumulent le nombre d'entités sans relâche au cours d'un cycle d'essuyage — chaque fondation, chaque sac de couchage, chaque objet abandonné est une chose que le serveur simule. Les performances en fin de cycle sont mesurablement plus mauvaises qu'au début, et un redémarrage quotidien récupère une quantité utile de ces performances.

À quel moment doit-il redémarrer ?

Utilisez {{minutes}} là où le nombre de compte à rebours doit être placé.

Ce qui se passe, dans l'ordre

  1. Le travail commenceAvertirsay "Redémarrage du serveur dans 15 minutes"
  2. 10 minutes avantAvertirsay "Redémarrage du serveur dans 10 minutes"
  3. 5 minutes avantAvertirsay "Redémarrage du serveur dans 5 minutes"
  4. 1 minutes avantAvertirsay "Redémarrage du serveur dans 1 minutes"
  5. Heure de redémarrageEnregistrerserver.save
  6. Heure de redémarrageArrêterquit

quit saves before exiting. Rust writes large save files, so allow the process a minute to finish rather than following up with a kill.

La ligne cron

Décalé de 15 minutes plus tôt que l'heure choisie, afin que le redémarrage lui-même tombe à cette heure plutôt qu'à 15 minutes après.

45 3 * * *  /opt/restart-rust.sh

Le script qu'il exécute

Enregistrer en tant que /opt/restart-rust.sh et le rendre exécutable. Il suppose que rcon-cli est sur le chemin et lit le mot de passe à partir de l'environnement plutôt que de l'intégrer.

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

# Scheduled restart for Rust.
# Generated by spawnly.net/tools/restart-scheduler

# The password stays out of this file. Put it in the environment, or in a
# file only root can read, and export it before this script runs.
RCON_HOST="${RCON_HOST:-127.0.0.1}"
RCON_PORT="${RCON_PORT:-28016}"
: "${RCON_PASSWORD:?set RCON_PASSWORD before running}"

send() {
  rcon-cli --host "$RCON_HOST" --port "$RCON_PORT" --password "$RCON_PASSWORD" "$1"
}

# 15 minute warning
send 'say "Redémarrage du serveur dans 15 minutes"'

sleep 300
# 10 minute warning
send 'say "Redémarrage du serveur dans 10 minutes"'

sleep 300
# 5 minute warning
send 'say "Redémarrage du serveur dans 5 minutes"'

sleep 240
# 1 minute warning
send 'say "Redémarrage du serveur dans 1 minutes"'

sleep 60
# Flush the world to disk
send 'server.save'

sleep 10
# Shut down cleanly
send 'quit'

# Give the process time to finish writing before anything restarts it.
sleep 30
systemctl start rust 2>/dev/null || true

Le cron utilise le fuseau horaire du serveur, pas le vôtre. Vérifiez-le avec timedatectl avant de supposer que 04:00 signifie 04:00 chez vous — un conteneur en UTC et un administrateur en Europe sont deux heures éloignés en été et une en hiver.

La partie spécifique à Rust

Rust écrit un grand fichier d'enregistrement et prend du temps réel pour le faire. Ne suivez pas l'arrêt avec un meurtre ou un redémarrage de conteneur sur un minuteur court ; donnez au processus au moins une minute. L'autre chose à planifier est qu'un redémarrage pendant les heures de pointe vide un serveur — les joueurs qui se font déconnecter au milieu d'un raid ne reviennent pas, donc planifiez-le pendant l'heure la plus calme de votre population.

Assistance & Aide