Ceci est un exemple de script de démarrage et de maintenance de serveur Minecraft possible pour les distributions GNU/Linux.
Contenu
- 1 script Systemd
- Installation de 1.1
- 1.2 Instance de configuration
- 1.3 Instances de démarrage/arrêt
- 1.4 Démarrage automatique
- 1.4.1 Activer
- 1.4.2 Désactiver
- 2 Init.d Script
- 2.1 Pré-requis
- 2.2 Télécharger
- Exigences 2.3
- Installation de 2.4
- 2.5 Désinstallation
- Utilisation de 2.6
- 2.7
- 2.8 Informations supplémentaires
- 3 scripts de démarrage alternatifs
Script Systemd
Pour tous les serveurs modernes prenant en charge Systemd. Systemd est le touche-à-tout. Pour Ubuntu, il est livré avec 15.04 (15.04 est une ancienne version qui a eu une fin de support, nous suggérons d'utiliser les versions LTS ultérieures à la place, mais le contenu suivant fonctionne pleinement dans cette version).
Installation
- Connectez-vous à votre serveur (v)root ou si vous souhaitez exécuter le serveur sur votre machine, ouvrez un terminal.
- Devenez root en utilisant su ou sudo. Pour vérifier si vous êtes root, lancez whoami pour afficher votre nom d'utilisateur.
- Ensuite, installez les packages nécessaires pour installer openjdk-8-jre-headless curl screen nano bash grep
- Créez le dossier /opt s'il n'existe pas déjà : mkdir /opt
- Créez le groupe minecraft pour l'utilisateur de minecraft que nous ajouterons à l'étape suivante : groupadd minecraft
- Vous devez maintenant créer l'utilisateur pour le service : useradd --system --shell /usr/sbin/nologin --home /opt/minecraft -g minecraft minecraft
- Créez le fichier Systemd Unit nano /etc/systemd/system/[email protected] et les éléments suivants :
[Unit] Description=Minecraft Server %i After=network.target [Service] WorkingDirectory=/opt/minecraft/%i # Résout le problème où le serveur minecraft redémarre sans cesse # Voir https://askubuntu.com/questions/ 953920/systemctl-service-timed-out-during-start pour plus d'informations Type=simple PrivateUsers=true # La base de données des utilisateurs n'est pas disponible depuis l'unité, seuls root et minecraft sont disponibles, tout le monde n'est personne User=minecraft Group=minecraft ProtectSystem=full # Le mappage en lecture seule de /usr /boot et /etc ProtectHome=true # /home, /root et /run/user semblent être vides depuis l'unité. Il est recommandé d'activer ce paramètre pour tous les services de longue durée (en particulier ceux en réseau). ProtectKernelTunables=true # /proc/sys, /sys, /proc/sysrq-trigger, /proc/latency_stats, /proc/acpi, /proc/timer_stats, /proc/fs et /proc/irq seront en lecture seule dans le unité. Il est recommandé de l'activer pour la plupart des services. # Implique MountFlags=slave ProtectKernelModules=true # Bloquer les appels système de module, ainsi que /usr/lib/modules. Il est recommandé d'activer cette option pour la plupart des services qui n'ont pas besoin de systèmes de fichiers spéciaux ou de modules de noyau supplémentaires pour fonctionner. # Implique NoNewPrivileges=yes ProtectControlGroups=true # Il est donc recommandé d'activer cette option pour la plupart des services. # Implique MountAPIVFS=yes # Définir les valeurs de mémoire par défaut Environment="MCMINMEM=512M" "MCMAXMEM=1024M" "SHUTDOWN_DELAY=5" "POST_SHUTDOWN_DELAY=10" # Modifier les valeurs de mémoire dans le fichier d'environnement EnvironmentFile=-/opt/minecraft/%i/ server.conf # Décommentez ceci pour corriger l'écran sur RHEL 8 #ExecStartPre=+/bin/sh -c 'chmod 777 /run/screen' # -XX:+CMSClassUnloadingEnabled a été déprécié et supprimé dans # Java 14 donc cela devrait être commenté si vous devez mettre à niveau # en raison de minecraft 1.17 nécessitant Java 16 ExecStart=/bin/sh -c 'find -L . -maxdepth 1 -type f -iregex ".*/(FTBServer|craftbukkit|spigot|paper|forge|minecraft_server).*jar" -print0 -quit | xargs -0 -I{} /usr/bin/screen -DmS mc-%i /usr/bin/java -server -Xms${MCMINMEM} -Xmx${MCMAXMEM} -XX:+UseG1GC -XX:+CMSClassUnloadingEnabled - XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -jar {} nogui' # Alternative à l'ExecStart ci-dessus. Trouvé pour mieux fonctionner car cela crée la session d'écran avant d'appeler Java pour exécuter le serveur. # Résout le problème rencontré lors du démarrage du service où il échouerait avec l'erreur "aucune session d'écran trouvée". ExecStartPre=/bin/sh -c 'find -L . -maxdepth 1 -type f -iregex ".*/(FTBServer|craftbukkit|spigot|paper|forge|minecraft_server).*jar" -print0 -quit | xargs -0 -I{} /usr/bin/screen -DmS mc-%i' ExecStart=/bin/sh -c '/usr/bin/java -server -Xms${MCMINMEM} -Xmx${MCMAXMEM} - XX:+UseG1GC -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -jar {} # insère le nom du fichier jar du serveur. à 'server.jar' nogui' # Simplifié de l'alternative ExecStartPre=/bin/sh -c '/usr/bin/screen -dmS mc-%i' ExecStart=/bin/sh -c '/usr/bin/java -server -Xmx${MCMAXMEM} -Xms${MCMINMEM} -jar server.jar nogui' ExecReload=/usr/bin/screen -p 0 -S mc-%i -X eval 'truc "recharger" 15' ExecStop=/ usr/bin/screen -p 0 -S mc-%i -X eval 'trucs "dire FERMETURE DU SERVEUR.
Instance de configuration
Vous pouvez maintenant télécharger vos Modpacks FTB dans un sous-dossier de /opt/minecraft/. Par exemple, vous placeriez le modpack "FTB Beyond" dans "/opt/minecraft/FTBBeyond" (sans espaces dans le nom). Si vous souhaitez exécuter des instances vanille, créez simplement un dossier dans /opt/minecraft et téléchargez le fichier minecraft_server.jar et créez le fichier eula.txt (en utilisant : echo "eula=true" > /opt/minecraft/vanilla/eula.txt ).
Après avoir téléchargé les fichiers du serveur minecraft, assurez-vous que "minecraft" est le propriétaire et le groupe propriétaire. Pour ce faire, lancez simplement "ls -la /opt/minecraft". Si ce n'est pas le cas, lancez "chown minecraft:minecraft /opt/minecraft/FTBBeyond". Vous devrez peut-être également terminer l'installation. Pour les packages FTB actuels, vous exécuteriez :
cd /opt/minecraft/FTBBeyond echo "eula=true" > /opt/minecraft/FTBBeyond/eula.txt su -c "/opt/minecraft/FTBBeyond/FTBInstall.sh" -s "/bin/bash" minecraft
Démarrer/arrêter des instances
Vous démarrez votre serveur en utilisant "systemctl start minecraft@FTBBeyond" et l'arrêtez en utilisant "systemctl stop minecraft@FTBBeyond". La partie derrière le "@" est le nom de votre instance, par exemple le nom du dossier. Ce script se charge également d'arrêter automatiquement votre serveur minecraft si vous redémarrez le serveur.
démarrage
Activer
systemctl activer minecraft@FTBBeyond
Désactiver
systemctl désactiver minecraft@FTBBeyond
Init.d Script
Pour les serveurs hérités qui n'ont pas Systemd intégré au système d'exploitation
Conditions préalables
Le package Screen doit être installé.
Sur les distributions CentOs et Red Hat :
miam écran d'installation
Sur les systèmes basés sur Debian tels que Ubuntu :
apt-get installer l'écran python
Télécharger
Pour télécharger le script avec wget, exécutez la commande suivante (ATTENTION LE SCRIPT A BESOIN DE TRAVAILLER - modifiez les variables WORLD, MCPATH et BACKUPPATH.
Important: Si vous utilisez la méthode wget et que le premier caractère de chaque ligne est un espace vide, le script ne fonctionnera pas et update-rc.d générera des erreurs. Si c'est le cas, vous devez supprimer les premiers espaces vides de chaque ligne. Attention cependant à ne rien supprimer d'autre qu'un espace vide !)
wget -O minecraft "http://minecraft.xxx/Tutorials/Server_startup_script/Script?action=raw"
#!/bin/bash # /etc/init.d/minecraft # version 0.4.2 2016/02/09 (AAAA-MM-JJ) # ### BEGIN INIT INFO # Fournit : minecraft # Obligatoire-Start : $local_fs $remote_fs screen-cleanup # Obligatoire-Stop : $local_fs $remote_fs # Devrait-Démarrer : $network # Devrait-S'arrêter : $network # Default-Start : 2 3 4 5 # Default-Stop : 0 1 6 # Description courte : Serveur Minecraft # Description: Démarre le serveur minecraft ### END INIT INFO #Paramètres SERVICE='minecraft_server.jar' SCREENNAME='minecraft_server' OPTIONS='nogui' USERNAME='minecraft' WORLD='world' MCPATH='/home/ minecraft' BACKUPPATH='/minecraft/minecraft.backup' MAXHEAP=2048 MINHEAP=1024 HISTORY=1024 CPU_COUNT=1 INVOCATION="java -Xmx${MAXHEAP}M -Xms${MINHEAP}M -XX:+UseConcMarkSweepGC -XX : +CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $SERVICE $OPTIONS" ME=`whoami` as_user() { if [ "$ME" = "$USERNAME" ] ; then bash -c "$1" else su - "$USERNAME" -c "$1" fi } mc_start() { if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then echo "$SERVICE est déjà en cours d'exécution !" else echo "Démarrage de $SERVICE..." cd $MCPATH as_user "cd $MCPATH && screen -h $HISTORY -dmS ${SCREENNAME} $INVOCATION" sleep 7 if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then echo "$SERVICE est en cours d'exécution." else echo "Erreur ! Impossible de démarrer $SERVICE !" fi fi } mc_saveoff() { if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then echo "$SERVICE est en cours d'exécution... suspension des sauvegardes" as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff "dire SERVER BACKUP STARTING. Serveur en lecture seule..."