Planifiez un redémarrage de serveur Garry's Mod
Les serveurs Garry's Mod se dégradent d'une manière particulièrement visible — les gamemodes chargés d'add-ons fuient l'état Lua, les comptes d'entités augmentent, et un serveur qui se sentait bien hier est visiblement plus mauvais aujourd'hui. Un redémarrage quotidien est une pratique courante pour une raison.
À 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
- Le travail commenceAvertir
say Redémarrage du serveur dans 15 minutes - 10 minutes avantAvertir
say Redémarrage du serveur dans 10 minutes - 5 minutes avantAvertir
say Redémarrage du serveur dans 5 minutes - 1 minutes avantAvertir
say Redémarrage du serveur dans 1 minutes - Heure de redémarrageArrêter
quit
There is no world to save — Garry’s Mod builds nothing persistent by default, so the restart is just a clean process exit. Gamemodes that do persist data usually save continuously.
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-gmod.sh
Le script qu'il exécute
Enregistrer en tant que /opt/restart-gmod.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 Garry's Mod.
# 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 '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 70
# Shut down cleanly
send 'quit'
# Give the process time to finish writing before anything restarts it.
sleep 30
systemctl start gmod 2>/dev/null || trueLe 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 à Garry's Mod
Il n'y a rien à enregistrer. Les gamemodes par défaut ne construisent rien de persistant, et les gamemodes qui persistent des données écrivent presque toujours cela en continu plutôt qu'à l'arrêt. Cela fait que la séquence est plus simple ici que partout ailleurs sur cette liste : avertir, puis quitter. Si votre gamemode retient l'état en mémoire, vérifiez sa documentation avant de supposer qu'une sortie propre est suffisante.