Solution de restart automatique

Zylios

Architecte en herbe
1 Août 2016
128
6
125
26
France
Bonjour a tous,

Depuis peux, je suis confronté a un petit problème.

Je souhaiterais que mon serveur se restart automatiquement lorsqu'il s'éteint.

Je recherche une solution script ( compatible linux, sous .sh ) ou une méthode pour un plugin.

Voila j'espère que certain d'entre vous m'aiderons !

Cordialement.
 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
28
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

Quoi qu'il en soit, tu dois mettre en place quelque chose d'externe à ton .jar qui va démarrer ton serveur.
Soit c'est le .jar lui même qui va appeler en externe un script bash par exemple. Il faut faire attention à cette solution que le serveur s'éteint bien avant le démarrage du script (sinon le second serveur va s'arrêter car les ressources (typiquement le port) seront déjà utilisé par une autre instance) et il faut également faire attention que le serveur lance bien le script avant de s'arrêter (sinon on risque de ne jamais l'allumer à nouveau).
Soit c'est le script qui démarre le .jar qui s'occupe de relancer le même .jar une fois l'instance terminée. Un script qui ressemble à celui qui a été donné dans le premier message ou de manière plus "bourrin":
Code:
while true
do
   java -jar Spigot.jar
done
Enfin, il y a l'idée de développer un programme qui va gérer lui même le démarrage du spigot/bukkit et le relancer si celui-ci s'arrête. Cela à l'avantage de pouvoir même le redémarrer lorsqu'il y a des crash (contrairement aux solutions précédentes).

A part ça, je ne pense pas qu'il y ai d'autres solutions pour redémarrer un serveur. Il va falloir te contenter de ça :)


Cordialement,
Detobel36
 

robin4002

Expert en informatique et systèmes d'information
Staff
Responsable technique
Responsable forum
12 Novembre 2012
20 891
158
3 004
347
26
Alsace
www.minecraftforgefrance.fr
Salut,
La boucle infini en bash c'est simple et efficace, je l'utilise sur tous mes serveurs.

Après pour faire plus développé on peut imaginer un script qui lance le serveur et garde son pid en mémoire. Ensuite ce script vérifies régulièrement si le pid fonctionne toujours, si ce n'est plus le cas le serveur est down donc on le relance.
 

Le minaw

Désobfuscateur à propergol
25 Juillet 2015
881
254
197
In a material world
github.com
je peux toujour employer le : Bukkit.spigot().restart(); dans mon code, mais ça me soule un peux XD
Inutile de raconter n'importe quoi, car :
tu dois mettre en place quelque chose d'externe à ton .jar qui va démarrer ton serveur

Ça peut pas être le taff d'une instance d'être son propre "watchdog".

Après pour faire plus développé on peut imaginer un script qui lance le serveur et garde son pid en mémoire. Ensuite ce script vérifies régulièrement si le pid fonctionne toujours, si ce n'est plus le cas le serveur est down donc on le relance.
En modifiant le premier snippet que j'ai envoyé, il devrait être facile d'arriver à ce résultat, que je trouve plus élégant que la boucle infinie.
 

Neph

Cyberchenapan
15 Mai 2016
386
168
155
autre part
crypt.lol
Une autre approche qui ne nécessite pas de pidfile pourrait être la vérification du fonctionnement du service en surveillant le réseau. (netstat -tln | grep 25565 + éventuellement -p pour le pid)
Il doit être possible d'utiliser cron (ou logiquement init, si on utilise systemd :D) pour vérifier régulièrement et relancer le serveur si besoin.
Ça reste moins propre que la méthode avec pgrep qui a l'avantage de ne rien faire si un truc étrange arrivait (process orphelin par ex).

Personnellement, peu importe la méthode, j'ajouterais aussi une alerte mail / log. Si le serveur (mc) a redémarré sans une action de ma part, ce n'est pas normal et je veux être au courant.