Suite à mon dernier billet (cf Créer un serveur Minecraft sur un Kimsufi), le problème qui se posait était que pour lancer un serveur minecraft, nous étions obligé de garder une console ssh d’ouverte, ce qui n’est pas pratique il faut le reconnaitre.
En effet si pour une raison ou une autre vous fermiez votre session, le serveur s’arrêtait aussitôt!
De plus je ne sais pas vous, mais devoir lancer à chaque fois une commande de type:
java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
ne m’enchantait pas vraiment! (pas facile à retenir ^^).
La solution pour cela est de lancer Minecraft comme un service à part entière. De cette façon il fonctionnera de la même façon que les services Apache ou Mysql par exemple (vous pourrez utiliser des commandes simple pour stop, start et restart le serveur Minecraft!).
Mettre en place le service Minecraft sur Ubuntu.
Pour pouvoir lancer le serveur minecraft en “fond de tâche” il faut effectuer quelques commandes simples que voici:
On créé un fichier “minecraft” dans le dossier “/etc/init.d”
vim /etc/init.d/minecraft
Dans ce fichier copiez-collez le script suivant en veillant à vous assurer que les variables et chemins suivants sont bien définis.
SERVICE : Nom du serveur minecraft que vous avez téléchargé (par défaut vous avez du mettre minecraft_server.jar)
USERNAME : Nom de l’utilisateur linux qui lance le service, root par défaut
MCPATH : Chemin absolu vers votre dossier “Minecraft”
BACKUPPATH : Chemin absolu vers le dossier de backup.
#!/bin/bash # /etc/init.d/minecraft #Settings SERVICE='minecraft_server.jar' USERNAME="root" MCPATH='/home/minecraft/' BACKUPPATH='/home/minecraft/minecraft.backup/' ME=`whoami` as_user() { if [ "$ME" == "$USERNAME" ] ; then bash -c "$1" else su - $USERNAME -c "$1" fi } mc_start() { if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null then echo "Tried to start but $SERVICE was already running!" else echo "$SERVICE was not running... starting." cd $MCPATH as_user "cd $MCPATH && screen -dmS minecraft java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui" sleep 7 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null then echo "$SERVICE is now running." else echo "Could not start $SERVICE." fi fi } mc_saveoff() { if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null then echo "$SERVICE is running... suspending saves" as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'" as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'" as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'" sync sleep 10 else echo "$SERVICE was not running. Not suspending saves." fi } mc_saveon() { if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null then echo "$SERVICE is running... re-enabling saves" as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'" as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'" else echo "$SERVICE was not running. Not resuming saves." fi } mc_stop() { if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null then echo "$SERVICE is running... stopping." as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'" as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'" sleep 10 as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'" sleep 7 else echo "$SERVICE was not running." fi if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null then echo "$SERVICE could not be shut down... still running." else echo "$SERVICE is shut down." fi } mc_update() { if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null then echo "$SERVICE is running! Will not start update." else MC_SERVER_URL=http://minecraft.net/`wget -q -O - http://www.minecraft.net/download.jsp | grep minecraft_server.jar\ | cut -d \" -f 2` as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL" if [ -f $MCPATH/minecraft_server.jar.update ] then as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/minecraft_server.jar" echo "Minecraft successfully updated." else echo "Minecraft update could not be downloaded." fi fi } mc_backup() { if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null then # echo "$SERVICE is running! Will not start backup." # else echo "Backing up minecraft data" if [ -d $BACKUPPATH/world_`date "+%m.%d.%Y"` ] then for i in 1 2 3 4 5 6 do if [ -d $BACKUPPATH/world_`date "+%m.%d.%Y"`-$i ] then continue else as_user "cd $MCPATH && cp -r world $BACKUPPATH/world_`date "+%m.%d.%Y"`-$i" break fi done else as_user "cd $MCPATH && cp -r world $BACKUPPATH/world_`date "+%m.%d.%Y"`" fi echo "Backing up the minecraft server executable" if [ -f "$BACKUPPATH/minecraft_server_`date "+%m.%d.%Y"`.jar" ] then for i in 1 2 3 4 5 6 do if [ -f "$BACKUPPATH/minecraft_server_`date "+%m.%d.%Y"`-$i.jar" ] then continue else as_user "cd $MCPATH && cp minecraft_server.jar \"$BACKUPPATH/minecraft_server_`date "+%m.%d.%Y"`-$i.jar\"" break fi done else as_user "cd $MCPATH && cp minecraft_server.jar \"$BACKUPPATH/minecraft_server_`date "+%m.%d.%Y"`.jar\"" fi fi echo "Backup complete" } #Start-Stop here case "$1" in start) mc_start ;; stop) mc_stop ;; restart) mc_stop mc_start ;; update) mc_stop mc_backup mc_update mc_start ;; backup) mc_saveoff mc_backup mc_saveon ;; status) if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null then echo "$SERVICE is running." else echo "$SERVICE is not running." fi ;; *) echo "Usage: /etc/init.d/minecraft {start|stop|update|backup|status|restart}" exit 1 ;; esac exit 0
Une fois le fichier enregistré, il faut maintenant lui accorder les droits nécéssaires à sa bonne execution (755).
chmod 755 /etc/init.d/minecraft
Maintenant on installe le lien symbolique “minecraft” qui nous permettra de facilement executer des actions sur le serveur Minecraft.
update-rc.d minecraft defaults
Voilà tout est prêt, vous pouvez maintenant lancer votre serveur simplement avec la commande suivante:
/etc/init.d/minecraft start
Pour les autres commandes disponibles vous avez:
start : Démarrer le serveur Minecraft si celui-ci est éteint.
stop : Arrêter le serveur Minecraft si celui-ci était allumé.
restart : Fait un stop puis un start du serveur, idéal quand celui-ci bug!
status : Vous indique si le serveur est toujours sur pied ou si il est down
backup : Effectue une sauvegarde du serveur (map comprise), idéal dans le cas ou vous auriez un gros crash serveur.
update : Effectue une mise à joujr en faisant une sauvegarde du serveur actuel et en téléchargeant le nouveau “.jar”. Jamais testé, je préfère le faire manuellement!
bonjour, merci pour ce beau turoriel, mais j’ai un probleme:
‘brian@serveur:/$ sudo /etc/init.d/minecraft start
minecraft_server.jar was not running… starting.
Could not start minecraft_server.jar.’
mais je ne sais pas pourquoi le serveur refuse de démarrer mon minecraft, pourtant le chemin est bon.
J’ai essayé avec ‘brian’ comme username aussi, mais pareil.
je suis sur ubuntu 10.4 server
merci de m’avoir lu
Plusieurs pistes pour toi:
– Le minecraft_server.jar a t-il les droits nécéssaires? Un chmod 755 est recommandé.
– Les chemins renseignés sont-ils bons?
Hello,
Y’a pas un problème à cette ligne ?
as_user “cd $MCPATH && screen -dmS minecraft java -Xmx1024M -Xms1024M -jar craftbukkit-0.0.1-SNAPSHOT.jar nogui”
Craftbukkit n’a pas été installé dans le tuto fait précédemment.
En effet, tournant sur Minecraft Bukkit (je ferais sans doute un tuto la dessus), j’ai oublié de modifié cette ligne pour le tuto.
J’ai fait la modif merci bien!
Petit hic? lequel ? Il suffit d’utiliser la commande “screen” avant la ligne java pour pouvoir fermer l’invite de commande 😉
Ensuite pour reprendre la main, il faut faire tout simplement :
screen -r pty…. (num de l’interface) …
D’accord et pour lancer facilement le serveur, pour le restarter facilement sans endommager la map etc etc.. il faut reconnaitre que ce petit script est plus pratique non?
Cela dit je ne connaissais pas trop cela je note l’astuce!
Bonjour,
Tout d’abord merci pour ton super tuto 🙂
Moi je suis chez OVH sous Gentoo Release 2.
J’ai un petit “souci”, actuellement pour jouer je suis obligé de passer par PUTTY et d’y insérer a chaque fois les lignes suivantes :
export PATH=/usr/local/bin/jdk1.6.0_24/bin:$PATH
cd /home
cd minecraft
java -Xmx2048M – Xms2048M -jar minecraft_server.jar nogui
Les lignes suivantes ne fonctionnent pas pour moi :
update-rc.d minecraft defaults
-bash > update-rc.d command not found
et
/etc/init.d/minecraft start
: command not foundft: line 4:
: command not foundft: line 16:
: command not foundft: line 22:
: command not foundft: line 31:
: command not foundft: line 49:
: command not foundft: line 63:
: command not foundft: line 74:
: command not foundft: line 94:
: command not foundft: line 112:
: command not foundft: line 153:
/etc/init.d/minecraft: line 186: syntax error near unexpected token `newline’
‘etc/init.d/minecraft: line 186: `
Je suppose qu’il s’agit du fait que je tourne avec Gentoo mais n’y connaissant pas gd chose… j’en appelle à votre aide 😉
Merci beaucoup
Malgré que je n’y connais pas grand chose, j’ai trouvé mes erreurs Voici la solution pour ceux qui aurait le même problème.
rc-update add minecraft default
Ensuite en ce qui concerne les autres erreurs, il s’agissait d’un retour à la ligne.. j’ai supprimé tous les espaces… et cela marche maintenant
Bonjour ,
j’ai un gros probleme c’est que quand je lance l’application ” minecraft ” , j’obtien ceci : http://www.hapshack.com/?v=asupprysy.png
mais le serveur ne s’ouvre pas !
j’ai essayer la commande ” start ”
mais quand j’ecri start ya ecri :
Unknown console command. Type “help” for help.
je fait help , ensuite il y a ecri comment fermer le server mais pas comment l’ouvrir ! 🙁
merci d’avance
Salut, il y a un petit problème dans ton script : je l’ai remarqué car le nom du fichier jar chez moi est minecraft-server.jar et non minecraft_server.jar. Enfin bref ça c’est pas important, l’important c’est que pour démarrer le serveur du fait :
as_user “cd $MCPATH && screen -dmS minecraft java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
et il faudrait plutôt faire :
as_user “cd $MCPATH && screen -dmS minecraft java -Xmx1024M -Xms1024M -jar $SERVICE nogui”
Voilà j’espère que j’en aurai aidé certains d’entre vous 😉
Bonjour,
Le serveur me demande sans arret le mot de passe avant chaque commande. (il me le demande 3 fois avant de s’arreter..)
comment puis-je le mettre de maniere automatique ?
Bonjour,
Il me marque “password for minecraft:”
minecraft est la session sou laquelle tourne le serveur
Help?
Merci d’avance
Merci pour ce tuto, par contre quand je fais : update-rc.d minecraft defaults, il me met l’erreur suivante :
root@ks393243:/etc/init.d# update-rc.d minecraft defaults
update-rc.d: using dependency based boot sequencing
insserv: warning: script ‘minecraft’ missing LSB tags and overrides
insserv: There is a loop between service munin-node and minecraft if stopped
insserv: loop involving service minecraft at depth 2
insserv: loop involving service munin-node at depth 1
insserv: Stopping minecraft depends on munin-node and therefore on system facility `$all’ which can not be true!
insserv: exiting now without changing boot order!
update-rc.d: error: insserv rejected the script header
du coup je ne sais pas le lancé au démarrage. (j’ai essayé plusieurs tuto pour lancer minecraft en script et automatiser la chose, avec les autres le lancement en script ne fonctionnait pas). (Par contre avec certain, la commande si dessus fonctionne et avec d’autres non)
Les versions de Minecraft ont je pense beaucoup changé depuis la version alpha/béta que j’utilisais. Ayant totalement décroché et ayant fermé mon serveur, je ne pourrais malheureusement pas vous fournir l’aide dont vous avez besoin.
Bonnes recherches à vous!