Fedora-Fr - Communauté francophone Fedora - Linux

Planet de Fedora-Fr : la communauté francophone autour de la distribution Linux Fedora

A propos

Cette page est actualisée toutes les heures.

Cette page est une sélection de blogs autour de Fedora. Fedora-Fr.org décline toute responsabilité au sujet des propos tenus par les auteurs des blogs de ce planet. Leurs propos sont leur entière responsabilité.

Le contenu de ce planet appartient à leurs auteurs respectifs. Merci de consulter leur blogs pour obtenir les licences respectives.

Mot-clefs : Minecraft

Script Cron pour Minecraft

Frédéric Thouin

Minecraft étant une application java ! il est parfois important de relancer le serveur ( car il monte en charge inutiliement) Mais comment relancer un serveur si il y a du monde de connecté !! c'est pas classe !

donc voila un petit script maison qui permet de vérifier si des utilisateurs sont connectés, et le cas échéant surveiller les logs du serveur pour relancer le serveur une fois vide de joueurs.

#!/bin/bash
#définition du path log :
logfile=/minecraft/server.log
ipserv="192.168.1.10"
port="25565"
netstat -ant | grep "$ipserv:$port.*ESTABLISHED"
if [[ $? == 0 ]]
       then   
               echo "$(date) il y a du monde sur Minecraft en attende de la déconection des joueurs" >> /var/log/messages


               while   inotifywait -q -e modify  $logfile 
               do
                       if tail -n1 $logfile | grep '\[INFO\] \<..*\> lost connection'
                              then
                               echo "$(date) déconection des joueurs Ok" >> /var/log/messages
                               echo "$(date) redémarage de Minecraft" >> /var/log/messages
                               netstat -ant | grep "$ipserv:$port.*ESTABLISHED" || (invoke-rc.d minecraft restart && wait )
                               echo "$(date) rédamarage de Minecraft Ok" >> /var/log/messages
                               break
                       fi
               done
       else   
               echo "$(date) redémarage de Minecraft" >> /var/log/messages
               (invoke-rc.d minecraft restart && wait )
               echo "$(date) rédamarage de Minecraft Ok" >> /var/log/messages

fi

Merci a frédéric P pour sont aide sur inotifywait et l'idée d'utiliser netstat

Minecraft Serveur At home

Frédéric Thouin

Et oui, je suis un Geek, je joue à MineCraft !

Pire que tout !! je joue seul mais sur un serveur perso !! WTF !!

Cela mérite une petite explication :

Configuration du client :

Je joue sur un eeePc : ASUS 1215B donc une configuration assez faible graphiquement et aussi au niveau du CPU.

J'ai testé de mettre Minecraft en condition minimal mais le FPS n'était pas trop au rendez-vous ( 15FPS max , même avec la version final 1.0).

Là, folie m'a pris de faire un test en créant un serveur Perso et ô bonheur je suis passé au dessus des 24 FPS \o/

Configuration du serveur :

Platforme : NEC Versa S970

CPU : Intel(R) Core(TM)2 Duo CPU T7500 @ 2.20GHz

RAM : 2 Go

System : Ubuntu 10.04 en mode texte. (une migration vers un serveur Fedora est en projet)

Installation et importation de la map solo :

On commence bien-sur par récupérer la version serveur de minecraft sur le site de minecraft

Et on la place dans un répertoire de son choix ( chez moi /media/minecraft )

il est maintenant possible de lancer le serveur sur le serveur avec cette commande :

java -Xmx1024M -Xms1024M -jar /media/minecraft/minecraft_server.jar nogui

Importation de la map perso : il suffit ce copier depuis votre serveur solo le répertoire comportant le monde de votre sauvagarde et la copier sur le serveur dans un répoertoire.

exemple :

scp -r ~/.minecraft/NOM_MAP user@ADRESSE_SERVEUR:/$MINECRAFT-SERVER_PATH/

Le nom de la map ( le répertoire contenant le monde ) doit être indiqué dans le fichier : /$MINECRAFT-SERVER_PATH/server.properties

level-name=NOM_MAP

Mise en place de Minecraft-server en mode service init

Cela évitera de lancer le serveur à la main quand on veut jouer.

voici mon script init :

#!/bin/bash
# /etc/init.d/minecraft

#Settings
SERVICE='minecraft_server.jar'
USERNAME="root"
MCPATH='/media/minecraft/'
BACKUPPATH='/media/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 -Xmx512M -Xms512M -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

Il faut maintenant configurer ce service pour qu'il se lance au démarrage :

update-rc.d minecraft defaults

Cerise sur le gateau !

J'ai donc un serveur en place ! il est lancé automatiquement au démarrage du système. Et si je mettais en place une carte type google map du mon monde !

Pour cela je vais utiliser overviewer.

Voici un exemple de rendus : http://overviewer.org/example/s

Une fois avoir récupérer et installer overviewer, il faut penser à récupérer un texture pack depuis le répertoire du client et le placer sur le serveur.

Et enfin on peux lancer le rendus :

/usr/local/bin/overviewer.py --rendermodes='lighting,cave,night,spawn' /media/minecraft/p2/ /var/www/minecraft --textures-path /media/minecraft/MAPPER/overviewer-Minecraft-Overviewer-a690771/

bien-sur il faut aussi un serveur Web fonctionnel.

il ne reste plus qu'a mettre dans un script cette ligne de commande, la mettre dans une tache cron 1 fois par jour et le tour est joué.