Planifiez un redémarrage de serveur 7 Days to Die

L'utilisation de la mémoire d'un serveur 7 Days to Die suit la quantité de la carte qui a été explorée et la quantité qui a été construite, et aucune de ces deux choses ne diminue. Redémarrer quotidiennement garde le serveur réactif tout au long d'une longue partie, ce qui compte le plus lors des nuits de l'horde où tout le monde se présente.

À 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émarrageEnregistrersaveworld
  6. Heure de redémarrageArrêtershutdown

The console here is telnet rather than RCON. Reach it over an SSH tunnel or from the machine itself — the telnet port must not be forwarded, because it authenticates with a password in clear text.

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

Le script qu'il exécute

Enregistrer en tant que /opt/restart-seven_days_to_die.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 7 Days to Die.
# 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:-8081}"
: "${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 'saveworld'

sleep 10
# Shut down cleanly
send 'shutdown'

# Give the process time to finish writing before anything restarts it.
sleep 30
systemctl start seven_days_to_die 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 à 7 Days to Die

La console ici est un telnet, pas RCON, et le telnet envoie son mot de passe en texte clair. Exécutez le script sur le serveur lui-même, ou atteignez le port via un tunnel SSH — jamais en le transmettant. Temporez le redémarrage loin du jour sept et de ses multiples : un redémarrage tombant au milieu d'une lune de sang est le pire moment possible, et le planning ne saura pas cela à moins que vous ne le planifiez.

Assistance & Aide