#!/bin/bash
#---------------------+
# Configuration |
#---------------------+
SCRNNAME="hub"
REPERTOIRE="/home/Update/hub/"
REPERTOIRE_BACKUP="/home/sauvegardes/"
SERVICE="hub.jar"
USER="root"
MINIMUMRAM="2G"
MAXIMUMRAM="4G"
#Ligne de lancement
DEMARRAGE="java -server -d64 -XX:UseSSE=1 -XX:+UseCMSCompactAtFullCollection -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+DisableExplicitGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:+AggressiveOpts -Xms$MINIMUMRAM -Xmx$MAXIMUMRAM -XX:PermSize=256m -jar $SERVICE nogui"
#---------------------+
# OS |
#---------------------+
## Débian
if [ -f /etc/rc.d/init.d/functions ]
then
. /etc/rc.d/init.d/functions
fi
## Ubuntu
if [ -f /lib/lsb/init-functions ]
then
. /lib/lsb/init-functions
fi
#---------------------+
# Utilitaires |
#---------------------+
# Fonction pour charger l'utilisateur
as_user() {
ME="$(whoami)"
if [ "$ME" = "$USER" ]; then
bash -c "$1"
else
su - "$USER" -c "$1"
fi
}
# Est-ce que le serveur tourne ?
is_running() {
if ps ax | grep -v grep | grep -iv SCREEN | grep $SERVICE > /dev/null; then
echo "Récupération du PID en cours"
PID=0
PID="$(ps ax | grep -v grep | grep -iv SCREEN | grep $SERVICE | awk '{print $1}')"
return 0
else
return 1
fi
}
#---------------------+
# Fonctions |
#---------------------+
# Fonction redémarrage automatique du serveur
mc_restart() {
if is_running; then
while is_running; do
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre dans 2 minutes\"\015'"
sleep 60
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre dans 1 minutes\"\015'"
sleep 30
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre dans 30 secondes\"\015'"
sleep 15
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre dans 15 secondes\"\015'"
sleep 5
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre dans 10 secondes\"\015'"
sleep 5
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre dans 5 secondes\"\015'"
sleep 1
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre dans 4 secondes\"\015'"
sleep 1
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre dans 3 secondes\"\015'"
sleep 1
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre dans 2 secondes\"\015'"
sleep 1
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre dans 1 secondes\"\015'"
sleep 1
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre !\"\015'"
sleep 3
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"whitelist on\"\015'"
sleep 5
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"kickall\"\015'"
sleep 5
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"save-all\"\015'"
sleep 3
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"save\"\015'"
sleep 5
mc_stop
sleep 10
sleep 10
done
echo " * $SCRNNAME est en train de redémarrer"
mc_start
sleep 60
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"whitelist off\"\015'"
else
echo " * [ERREUR] $SCRNNAME ne tourne pas. Impossible de le redémarrer !"
fi
}
# Fonction pour démarrer le serveur
mc_start() {
as_user "iptables -F"
as_user "iptables -X"
if is_running ; then
echo " * [ERREUR] $SCRNNAME est déjà en cours d'exécution [PID $PID]. Impossible de le démarrer..."
else
echo " * $SCRNNAME n'est pas démarrer, lancement en cours..."
as_user "cd \"$REPERTOIRE\" && screen -c /dev/null -dmS $SCRNNAME $DEMARRAGE"
sleep 8
if is_running; then
echo " * [OK] $SCRNNAME vient de démarrer [PID $PID]"
else
echo " * [ERREUR] Impossible de démarrer $SCRNNAME"
fi
fi
}
# Fonction pour stopper le serveur
mc_stop() {
if is_running; then
while is_running; do
sleep 1
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"save-all\"\015'"
sleep 1
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre dans 3 secondes\"\015'"
sleep 1
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre dans 2 secondes\"\015'"
sleep 1
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre dans 1 secondes\"\015'"
sleep 1
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"bc &c&lLe serveur redémarre !\"\015'"
sleep 1
as_user "screen -p 0 -S $SCRNNAME -X eval 'stuff \"stop\"\015'"
sleep 7
done
echo " * $SCRNNAME est en train de se stopper..."
else
echo " * [ERREUR] $SCRNNAME n'est pas démarrer... Impossible de l'arrêter"
fi
}
# Fonction pour accéder à la console
mc_console() {
if is_running; then
as_user "screen -S $SCRNNAME -dr"
else
echo " * [ERREUR] Impossible d'accéder à la console de $SCRNNAME car il n'est pas démarrer !"
fi
}
mc_server_backup() {
jour=$(date +%d-%m-%Y-%H-%M)
echo "Lancement de la backup"
as_user "mkdir $REPERTOIRE_BACKUP$jour"
echo "Création de l'espace du backup effectuée"
as_user "cp -r $REPERTOIRE $REPERTOIRE_BACKUP$jour"
echo "Backup du serveur $SCRNNAME effectuée avec succès"
}
case $1 in
start)
mc_start
mc_console
;;
stop)
mc_stop
;;
restart)
mc_restart
mc_console
;;
console)
mc_console
;;
remote-start)
mc_stop
mc_start
;;
backup)
mc_server_backup
;;
*)
echo "Utilisation: {start|stop|restart|console|backup}"
;;
esac
exit 1