Planifiez un redémarrage de serveur Don't Starve Together

Don't Starve Together est conçu pour fonctionner en continu — le monde avançant pendant que personne ne joue est le but. Les redémarrages sont une question de récupération de la mémoire sur de longues durées plutôt que de quoi que ce soit que le jeu nécessite.

À 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 commenceAvertirc_announce("Redémarrage du serveur dans 15 minutes")
  2. 10 minutes avantAvertirc_announce("Redémarrage du serveur dans 10 minutes")
  3. 5 minutes avantAvertirc_announce("Redémarrage du serveur dans 5 minutes")
  4. 1 minutes avantAvertirc_announce("Redémarrage du serveur dans 1 minutes")
  5. Heure de redémarrageEnregistrerc_save()
  6. Heure de redémarrageArrêterc_shutdown()

The console takes Lua, which is why these look like function calls. In a cluster with caves you must send the sequence to every shard — each one is a separate server with its own world to save.

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-dst.sh

Le script qu'il exécute

Enregistrer en tant que /opt/restart-dst.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 Don't Starve Together.
# 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:-10998}"
: "${RCON_PASSWORD:?set RCON_PASSWORD before running}"

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

# 15 minute warning
send 'c_announce("Redémarrage du serveur dans 15 minutes")'

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

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

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

sleep 60
# Flush the world to disk
send 'c_save()'

sleep 10
# Shut down cleanly
send 'c_shutdown()'

# Give the process time to finish writing before anything restarts it.
sleep 30
systemctl start dst 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 à Don't Starve Together

La console prend du Lua, c'est pourquoi les commandes ont l'air de fonctions d'appel. La partie importante est le cluster : un monde avec des cavernes fonctionne comme deux serveurs séparés avec deux enregistrements séparés, et la séquence doit atteindre les deux. Envoyer cela uniquement au maître shard enregistre la surface et abandonne tout ce qui est en dessous.

Assistance & Aide