Planifiez un redémarrage de serveur Project Zomboid

Zomboid garde les chunks explorés résidents, et l'empreinte mémoire d'un serveur en cours de fonctionnement depuis longtemps augmente régulièrement avec la distance parcourue par vos joueurs. Un redémarrage est la seule chose qui la ramène.

À 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 commenceAvertirservermsg "Redémarrage du serveur dans 15 minutes"
  2. 10 minutes avantAvertirservermsg "Redémarrage du serveur dans 10 minutes"
  3. 5 minutes avantAvertirservermsg "Redémarrage du serveur dans 5 minutes"
  4. 1 minutes avantAvertirservermsg "Redémarrage du serveur dans 1 minutes"
  5. Heure de redémarrageEnregistrersave
  6. Heure de redémarrageArrêterquit

quit saves and exits cleanly. Zomboid keeps a lot of loaded chunks in memory on a well-explored map, so the save can take noticeably longer than you expect.

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

Le script qu'il exécute

Enregistrer en tant que /opt/restart-project_zomboid.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 Project Zomboid.
# 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:-27015}"
: "${RCON_PASSWORD:?set RCON_PASSWORD before running}"

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

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

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

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

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

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

sleep 10
# Shut down cleanly
send 'quit'

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

L'enregistrement peut prendre considérablement plus de temps que vous ne l'attendez sur une carte bien explorée, donc laissez du temps réel entre l'enregistrement et l'arrêt. Zomboid est également particulièrement punitif en cas de déconnexion — un joueur tué par une déconnexion reste mort — ce qui fait que le choix de l'heure de redémarrage est plus conséquent ici que dans la plupart des jeux. Choisissez des heures réellement mortes.

Assistance & Aide