Skip to content

Instantly share code, notes, and snippets.

@o-be-one
Forked from jdkeke142/minecraft2
Last active February 16, 2016 22:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save o-be-one/ad30e9a257327835dbda to your computer and use it in GitHub Desktop.
Save o-be-one/ad30e9a257327835dbda to your computer and use it in GitHub Desktop.
HH Script minecraft2
#!/bin/bash
### BEGIN INIT INFO
# Provides: minecraft2
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Harmony-Hosting - Minecraft Script
# Description: init.d Minecraft
### END INIT INFO
# # # # # # # # # # # # # # # # # # # # #
# CONFIGURATION CLIENT #
# # # # # # # # # # # # # # # # # # # # #
#Ram MAX (en pourcentage)
RAM="22"
#Nom du serveur
SCREEN="server_minecraft2"
#Chemin du serveur
MCPATH="/home/minecraft2/"
#Chemin des sauvegardes
BACKUPPATH="/home/minecraft_backups/minecraft2"
# # # # # # # # # # # # # # # # # # # # # #
# CONFIGURATION SYSTEME - NE PAS TOUCHER #
# # # # # # # # # # # # # # # # # # # # # #
RAM_Xmn="22"
RAM_Xss="1024"
USERNAME="minecraft"
SERVICE=`ls $MCPATH | grep .jar | head -n 1`
CPU_COUNT=`cat /proc/cpuinfo | grep -c ^processor`;
GUEST_OS_MEMORY=64;
MAX_PERM_SIZE=128;
LOGPATH="${BACKUPPATH}/logs/"
WHOLEBACKUP="${BACKUPPATH}/server/"
WORLBACKUPPATH="${BACKUPPATH}/worlds/"
BACKUPFORMAT="tar"
WORLDSTORAGE="${MCPATH}"
MAX_MEMORY=`free -m -t | grep "^Mem:" | awk '{print $2}'`;
XMX=$(($MAX_MEMORY / 100 * $RAM ))
XMS=$((XMX / 8))
JAVA_COMMAND="java -Dfile.encoding=UTF8 ";
JAVA_COMMAND=$JAVA_COMMAND"-Xmx"$XMX"m ";
JAVA_COMMAND=$JAVA_COMMAND"-Xms"$XMS"m ";
JAVA_COMMAND=$JAVA_COMMAND"-Xmn"$RAM_Xmn"m ";
JAVA_COMMAND=$JAVA_COMMAND"-Xss"$RAM_Xss"k ";
JAVA_COMMAND=$JAVA_COMMAND"-XX:+UseConcMarkSweepGC ";
JAVA_COMMAND=$JAVA_COMMAND"-XX:+CMSIncrementalPacing ";
JAVA_COMMAND=$JAVA_COMMAND"-XX:MaxPermSize=128M "
JAVA_COMMAND=$JAVA_COMMAND"-XX:ParallelGCThreads="$CPU_COUNT" ";
JAVA_COMMAND=$JAVA_COMMAND"-XX:+AggressiveOpts ";
JAVA_COMMAND=$JAVA_COMMAND"-jar $SERVICE ";
INVOCATION=`echo $JAVA_COMMAND`
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#Permissions des dossier
chown -R minecraft:minecraft $MCPATH
chown -R minecraft:minecraft $BACKUPPATH
#Declaration des couleurs
VERT="\\033[1;32m"
NORMAL="\\033[0;39m"
ROUGE="\\033[1;31m"
ROSE="\\033[1;35m"
BLEU="\\033[1;34m"
BLANC="\\033[0;02m"
BLANCLAIR="\\033[1;08m"
JAUNE="\\033[1;33m"
CYAN="\\033[1;36m"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
ME=`whoami`
as_user() {
if [ $ME == $USERNAME ] ; then
bash -c "$1"
else
su $USERNAME -s /bin/bash -c "$1"
fi
}
is_running() {
if ps ax | grep -v grep | grep "$SCREEN" > /dev/null
then
return 0
fi
return 1
}
datepath() {
if [ -e $1`date +%F`$2 ]
then
echo $1`date +%FT%T`$3
else
echo $1`date +%F`$3
fi
}
mc_start() {
cd $MCPATH
as_user "cd $MCPATH && screen -dmS $SCREEN $INVOCATION"
#Wait starting ..
seconds=0
until ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
do
sleep 1
seconds=$seconds+1
if [[ $seconds -eq 5 ]]
then
echo "Minecraft n'est toujours pas lance.. On attend encore un peu.."
fi
if [[ $seconds -ge 120 ]]
then
echo -e "$ROUGE Minecraft n'a pas pu demarre. $NORMAL"
exit 1
fi
done
echo -e "$VERT Minecraft a demarre. $NORMAL"
}
mc_saveoff() {
if is_running
then
echo -e "$VERT Minecraft est demarre. Desactivation des sauvegardes automatiques. $NORMAL"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"save-off\"\015'"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"save-all\"\015'"
sync
sleep 10
else
echo -e "$VERT Minecraft n'est pas demarre. Pas de desactivation sauvegardes automatiques. $NORMAL"
fi
}
mc_saveon() {
if is_running
then
echo -e "$VERT Minecraft est demarre. Re-activation des sauvegardes automatiques. $NORMAL"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"save-on\"\015'"
else
echo -e "$ROUGE Minecraft n'est pas demarre. Pas de re-activation des sauvegardes automatiques. $NORMAL"
fi
}
mc_command() {
if is_running
then
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"$*\"\015'"
else
echo -e"$ROUGE Minecraft n'est pas demarre. Impossible de dire quelque chose. $NORMAL"
fi
}
mc_stop() {
echo -e "$CYAN Sauvegarde des mondes. $NORMAL"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"save-all\"\015'"
sleep 10
echo -e "$VERT Arret de Minecraft $NORMAL"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"stop\"\015'"
sleep 0.5
seconds=0
while ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
do
sleep 1
seconds=$seconds+1
if [[ $seconds -eq 5 ]]
then
echo -e "$JAUNE Minecraft n'est toujours pas arrete. On attend encore un peu.. $NORMAL"
fi
if [[ $seconds -ge 120 ]]
then
logger -t minecraft-init "Minecraft n'a pas reussi a s'eteindre. Essayez de forcer avec kill, attention perte de donnees."
echo -e "$ROUGE Minecraft n'a pas reussi a s'eteindre. Essayez de forcer avec kill, attention perte de donnees. $NORMAL"
exit 1
fi
done
echo -e "$VERT Minecraft s'est arrete. $NORMAL"
}
get_worlds() {
a=1
for NAME in $(ls $WORLDSTORAGE)
do
if [ -d $WORLDSTORAGE/$NAME ]
then
if [ -d $WORLDSTORAGE/$NAME/data ]
then
WORLDNAME[$a]=$NAME
a=$a+1
fi
fi
done
}
mc_paste_log() {
echo -e "$JAUNE Envoie du fichier de log en ligne $NORMAL"
as_user "pastebinit ${MCPATH}logs/latest.log"
echo -e "$VERT OK $NORMAL"
}
mc_paste_error() {
echo -e "$JAUNE Envoie du fichier de log ERROR en ligne $NORMAL"
cat ${MCPATH}logs/latest.log | grep -C 8 ERROR | tail -n 10 > ${MCPATH}logs/error.log
as_user "pastebinit ${MCPATH}logs/error.log"
rm ${MCPATH}logs/error.log
echo -e "$VERT OK $NORMAL"
}
mc_whole_backup() {
echo -e "$JAUNE Sauvegarde du serveur entier dans $WHOLEBACKUP $NORMAL"
as_user "mkdir -p $WHOLEBACKUP"
path=`datepath $WHOLEBACKUP/minecraft_`
as_user "cp -rP $MCPATH $path"
}
mc_world_backup() {
get_worlds
today="`date +%F`"
as_user "mkdir -p $WORLBACKUPPATH"
# Check if the backupt script compatibility is enabled
if [ "$BACKUPSCRIPTCOMPATIBLE" ]
then
echo "Detected that backup script compatibility is enabled, deleting old backups that are not necessary."
as_user "rm -r $BACKUPPATH/*"
fi
for INDEX in ${!WORLDNAME[@]}
do
echo -e "$JAUNE Sauvegarde du monde: ${WORLDNAME[$INDEX]} $NORMAL"
case "$BACKUPFORMAT" in
tar)
if [ "$BACKUPSCRIPTCOMPATIBLE" ]
then
path=$WORLBACKUPPATH/${WORLDNAME[$INDEX]}.tar.bz2
else
as_user "mkdir -p $WORLBACKUPPATH/${today}"
path=`datepath $WORLBACKUPPATH/${today}/${WORLDNAME[$INDEX]}_ .tar.bz2 .tar.bz2`
fi
as_user "tar -hcjf $path $MCPATH/${WORLDNAME[$INDEX]}"
;;
zip)
if [ "$BACKUPSCRIPTCOMPATIBLE" ]
then
path=$WORLBACKUPPATH/${WORLDNAME[$INDEX]}.zip
else
as_user "mkdir -p $WORLBACKUPPATH/${today}"
path=`datepath $WORLBACKUPPATH/${today}/${WORLDNAME[$INDEX]}_ .zip .zip`
fi
as_user "zip -rq $path $MCPATH/${WORLDNAME[$INDEX]}"
;;
*)
echo -e "$BACKUPFORMAT is no supported backup format"
;;
esac
done
}
mc_console() {
if is_running
then
chmod -R 777 /dev/pts/*
as_user "screen -r $SCREEN"
else
echo -e "$ROUGE Minecraft n'est pas demarre. Impossible de voir la console. $NORMAL"
fi
}
mc_config() {
clear
echo "########################################################"
echo "# Bienvenue dans le script de configuration Minecraft #"
echo "# #"
echo "# C'est ici que vous allez pouvoir modifer rapidement #"
echo "# les différents paramètres de votre serveur Minecft #"
echo "# #"
echo "# Si vous ne savez pas quoi entrer, appuyez simplement #"
echo "# sur la touche Entrer de votre clavier pour continuer #"
echo "########################################################"
echo ""
SC_PATH=$(readlink -f $0)
# Ask for Maximum RAM
read -e -p "Memoire vive maximum en pourcent : " -i "$RAM" P_XMX
TEST_PERCENT=`echo "$P_XMX" | grep '^[0-9]\{2,2\}$'`;
if [ -z "$TEST_PERCENT" ]; then
echo -e "$ROUGE Erreur -> Le pourcentage n'est pas compris entre 10..99 : '" $1"' $NORMAL";
exit 1;
fi
sed -i "s/^RAM=\".*/RAM=\"${P_XMX}\"/" $SC_PATH
# Ask for server mv
read -e -p "Voulez vous deplacer le serveur Minecraft (cas de multi-serveurs) ? " -i "Non" Q_MV
if echo $Q_MV | grep -i "^oui$" > /dev/null ; then
read -e -p "Nom du serveur (5 lettres et plus, unique et sans espace!) : " -i "$SCREEN" Q_SCREEN
read -e -p "Emplacement du serveur : " -i "$MCPATH" Q_MCPATH
read -e -p "Emplacement des sauvegardes du serveur : " -i "$BACKUPPATH" Q_BACKUPPATH
if [ ${#Q_SCREEN} -le 5 ] || [ ${#Q_MCPATH} -le 3 ] || [ ${#Q_BACKUPPATH} -le 5 ]; then
echo -e "${ROUGE} Les chaines sont trop courtes ! $NORMAL";
exit 1
fi
Q_MCPATH="$(echo $Q_MCPATH | sed 's/\//\\\//g')"
Q_BACKUPPATH="$(echo $Q_BACKUPPATH | sed 's/\//\\\//g')"
sed -i "s/^SCREEN=\".*/SCREEN=\"${Q_SCREEN}\"/" $SC_PATH
sed -i "s/^MCPATH=\".*/MCPATH=\"${Q_MCPATH}\/\"/" $SC_PATH
sed -i "s/^BACKUPPATH=\".*/BACKUPPATH=\"${Q_BACKUPPATH}\/\"/" $SC_PATH
mkdir -p $Q_MCPATH 2> /dev/nul
mkdir -p $Q_BACKUPPATH 2> /dev/null
fi
# Good bye
echo -e "${VERT}Configuration terminee.$NORMAL Vous devriez redemarrer votre serveur."
}
case "$1" in
start)
if is_running; then
echo -e "$JAUNE Le serveur est deja demarre. $NORMAL"
else
mc_start
fi
;;
stop)
if is_running; then
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say -------------------------------------- \"\015'"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say Arret du serveur dans 10 secondes \"\015'"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say -------------------------------------- \"\015'"
mc_stop
else
echo -e "$ROUGE Pas de serveur demarre $NORMAL"
fi
;;
restart)
if is_running; then
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say -------------------------------------- \"\015'"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say Redémarage du serveur dans 10 secondes \"\015'"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say -------------------------------------- \"\015'"
mc_stop
else
echo -e "$ROUGE Le serveur n'est pas demarre. $VERT Demarrage... $NORMAL"
fi
mc_start
;;
backup)
if is_running; then
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say -------------------------------------- \"\015'"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say Sauvegarde des mondes.\"\015'"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say -------------------------------------- \"\015'"
mc_saveoff
mc_world_backup
mc_saveon
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say -------------------------------------- \"\015'"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say Sauvegarde termine.\"\015'"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say -------------------------------------- \"\015'"
else
mc_world_backup
fi
;;
whole-backup)
if is_running; then
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say -------------------------------------- \"\015'"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say Sauvegarde du serveur entier ...... \"\015'"
as_user "screen -p 0 -S $SCREEN -X eval 'stuff \"say -------------------------------------- \"\015'"
mc_stop
mc_whole_backup
mc_start
else
mc_whole_backup
fi
;;
save-off)
if is_running; then
mc_saveoff
else
echo -e "$VERT Le serveur n etait pas demarre. Sync depuis la ram quand meme... $NORMAL"
fi
;;
save-on)
if is_running; then
mc_saveon
else
echo -e "$ROUGE Le serveur n'est pas demarre. $NORMAL"
fi
;;
command)
if is_running; then
mc_command "${@:2}"
else
echo -e "$ROUGE Le serveur n'est pas demarre. Impossible de faire cela $NORMAL"
fi
;;
status)
if is_running
then
echo -e "$VERT Minecraft est demarre. $NORMAL"
else
echo -e "$ROUGE Minecraft n'est pas demarre. $NORMAL"
fi
;;
kill)
PID=`ps aux | grep -v grep | grep $SCREEN | awk '{print $2}'`
kill -9 ${PID[0]} 2>/dev/null
;;
console)
if is_running; then
mc_console
else
echo -e "$ROUGE Le serveur n'est pas demarre. $NORMAL"
fi
;;
config)
mc_config
;;
paste-log)
mc_paste_log
;;
paste-error)
mc_paste_error
;;
*)
echo -e "$ROSE [HarmonyScript - Minecraft - V1.0]"
echo
echo -e "$ROSE Commandes:"
echo -e "$VERT start $CYAN == $JAUNE Demarrer le serveur"
echo -e "$VERT stop $CYAN == $JAUNE Arreter le serveur"
echo -e "$VERT restart $CYAN == $JAUNE Redemarrer le serveur"
echo -e "$VERT console $CYAN == $JAUNE Afficher la console minecraft"
echo -e "$VERT backup $CYAN == $JAUNE Backup les mondes du serveur"
echo -e "$VERT whole-backup $CYAN == $JAUNE Backup le serveur dans son ensemble"
echo -e "$VERT paste-log $CYAN == $JAUNE Envoier les log du serveur via pastebin"
echo -e "$VERT paste-error $CYAN == $JAUNE Envoier les log ERREUR du serveur via pastebin"
echo -e "$VERT command $CYAN == $JAUNE Lancer une commande dans le jeu"
echo -e "$VERT status $CYAN == $JAUNE Afficher le status du serveur"
echo -e "$VERT kill $CYAN == $JAUNE Fermer $ROUGE brusquement $JAUNE Minecraft $ROUGE ATTENTION !!"
echo -e "$VERT config $CYAN == $JAUNE Configurer la memoire vive du serveur et son emplacement $NORMAL"
;;
esac
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment