Créer un screen dans un script .sh ? Problème de lancement de script

Bonjour tout le monde !

J’ai un petit soucis concernant un de mes scripts (nommé “boot.sh”), j’espérais, éventuellement trouver de l’aide parmi vous…

Je vous explique, on ne va pas y aller par quatre chemins :

J’ai un serveur dédié, sur lequel je fais tourner un serveur Minecraft. Mon script est là typiquement pour start, stop et reboot le serveur (donc un script avec une variable d’exécution.

Ce script marche très bien pour le stop : en effet ./boot.sh stop fonctionne très bien.

En revanche, ./boot.sh reboot me donne uniquement le “stop” du serveur (alors qu’il est censé aussi le relancer derrière)

Autant vous dire, vous l’aurez compris, que ./boot.sh start ne fonctionne ni de près ni de loin.

Je précise par là qu’il n’y a pas de message d’erreur dans ma fenêtre quand je lance ./boot.sh start ou ./boot.sh reboot

C’est bien une commande “screen” qui me donne du fil à retordre (voir le script en dessous)

Je vous donne donc le code complet du script, afin que vous puissiez (sûrement et je l’espère tellement) voir une erreur idiote de ma part (je suppose que ça vient de là).

#!/bin/bash
SCREEN_NAME="minecraftscreen"
URL_SERVER="/home/minecraft"
JAR_SERVER="spigot.jar"

cd $URL_SERVER

case $1 in
    "start")
        screen -dmS $SCREEN_NAME java -Xmx12G -Xms18G -jar $JAR_SERVER nogui
    ;;
    "stop")
        screen -S $SCREEN_NAME -p 0 -X stuff "`printf "stop\r"`"; sleep 10
    ;;
    "reboot")
        screen -S $SCREEN_NAME -p 0 -X stuff "`printf "stop\r"`"; sleep 10

        screen -dmS $SCREEN_NAME java -Xmx12G -Xms18G -jar $JAR_SERVER nogui
    ;;
    *)
        echo -e "Le script demande au moins un des parametres:\033[32m | start | stop | reboot |\033[0m"
    ;;
esac

Merci d’avance de votre aide, ça fait 2 jours que je m’arrache les cheveux avec ça.

(PS : Se pourrait-il qu’il s’agisse d’une erreur de permission)

Bien amicalement,

Antoine

Cela ne peux pas marcher, le script est tué au moment où le serveur s’éteint, il te faut gérer autrement la partie ‘restart’ et ‘start’ avec un script qui se lancera au démarrage.

1 J'aime

Salut Clochette ! Merci pour ta réponse.

M’y connaissant (comme tu as sans doute pu le remarquer) très peu dans ce domaine, aurais-tu une solution à me proposer pour m’aider ?

Salut,

N’aurais-tu pas oublié le -X :

screen -dmS $SCREEN_NAME -X java -Xmx12G -Xms18G -jar $JAR_SERVER nogui

?

Si maintenant tu as envie que ça s’exécute au démarrage, il te faut faire quelque chose du genre :


~# crontab -e
@reboot ton_script_ici

D’ailleurs, il faudrait que l’option start ton script aille aussi taper dans le screen déjà existant. Sinon, c’est la porte ouverte à la prolifération de screens.
En fait, moi j’aurais plutôt tendance dans le stop à fermer complètement le screen, mais c’est une question de tempérament :slight_smile: