Planifiez un redémarrage de serveur Factorio

Factorio est le jeu de cette liste qui a le moins besoin d'un redémarrage planifié. Il est construit pour fonctionner pendant des semaines, son utilisation de la mémoire est proportionnelle à l'usine plutôt qu'à la durée de fonctionnement, et un serveur tête de lecture laissé seul continuera simplement à travailler.

À 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 commenceAvertirRedémarrage du serveur dans 15 minutes
  2. 10 minutes avantAvertirRedémarrage du serveur dans 10 minutes
  3. 5 minutes avantAvertirRedémarrage du serveur dans 5 minutes
  4. 1 minutes avantAvertirRedémarrage du serveur dans 1 minutes
  5. Heure de redémarrageEnregistrer/server-save
  6. Heure de redémarrageArrêter/quit

Plain text sent over Factorio RCON is printed straight into chat, which is why the broadcast line has no command in front of it. Anything starting with a slash is treated as a command instead.

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

Le script qu'il exécute

Enregistrer en tant que /opt/restart-factorio.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 Factorio.
# 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 'Redémarrage du serveur dans 15 minutes'

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

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

sleep 240
# 1 minute warning
send '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 factorio 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 à Factorio

La raison de le planifier quand même est l'enregistrement, pas le redémarrage — exécuter /server-save sur un minuteur vous donne une rotation de points de récupération que les enregistrements automatiques seuls ne font pas. Notez que le texte brut envoyé via Factorio's RCON est imprimé directement dans le chat, ce qui est pourquoi la ligne d'avertissement n'a pas de commande devant elle ; tout ce qui commence par une barre oblique est traité comme une commande plutôt que comme du texte.

Assistance & Aide