Fedora-Fr - Communauté francophone Fedora - Linux

Communauté francophone des utilisateurs de la distribution Linux Fedora.

  

Dernière news : Fedora 30 est mort ce soir

#1 31/01/2011 19:23:07

koshie
Membre
Lieu : Couronne Parisienne
Inscription : 05/07/2008
Messages : 292
Site Web

Exécuter un script sh dans un screen

Bonsoir,

J'ai un ami qui possède un dédié et qu'il souhaite utiliser pour Minecraft.

Jusqu'ici en l'aidant, tout fonctionne, seulement j'aimerai qu'au lancement du serveur (en cas de reboot, de down etc...) un petit script .sh se lance pour lancer le jeu dans un screen avec l'interface du serveur.

En gros en lançant Minecraft le terminal est occupé par une interface en ligne de commande (si on la coupe le serveur se coupe...) et donc j'aimerai qu'en cas de reboot, le script se lance et que lorsqu'on attache le screen, l'interface soit présente, comme-ci au reboot quelqu'un l'avait lancé dans le screen à la main. J'ai écris un petit truc où j'avais essayé de lancer un man touch pour voir si ça marchait.

À l'exécution du script je suis bien mis dans le screen MAIS je n'ai pas le man de lancé... J'ai essayé un touch test.txt, le fichier est bien crée...

#/bin/sh

# Connection au screen minecraft
screen -S minecraft -x
# Test pour voir si ça marche
man touch

Normalement c'est un .BAT que j'ai «repris» car fait pour Windows bien sûr... :

@echo off

java -Xms1024M -Xmx1024M -jar craftbukkit.jar

pause

J'ai pas encore inclus la commande java car j'aimerai voir si mes manip' marchent ;).

Koshicalement

Hors ligne

#2 01/02/2011 09:55:28

PapsOu
Developpeur PHP7 Symfony3
Rédacteur Wiki
Lieu : Quimper
Inscription : 27/11/2009
Messages : 1 849
Site Web

Re : Exécuter un script sh dans un screen

    #/bin/sh

    # Connection au screen minecraft
    screen -S minecraft -x
    # Test pour voir si ça marche
    man touch

je verrai plutôt ça :

    #/bin/sh

    # Connection au screen minecraft
    screen -S minecraft -x &
    # Test pour voir si ça marche
    man touch

Dernière modification par PapsOu (01/02/2011 09:55:46)

Hors ligne

#3 01/02/2011 22:36:17

WilQu
Membre
Lieu : Île-de-France
Inscription : 16/02/2008
Messages : 615

Re : Exécuter un script sh dans un screen

#/bin/sh

    # Connection au screen minecraft
    screen -S minecraft -x
    # Test pour voir si ça marche
    man touch

Ceci lance screen, puis attend que tu quittes screen pour lancer man, en dehors de screen.

#/bin/sh

    # Connection au screen minecraft
    screen -S minecraft -x &
    # Test pour voir si ça marche
    man touch

Ceci lance screen en arrière plan, puis lance man, en dehors de screen.

Pour lancer une commande dans screen, c'est beaucoup plus simple :

screen -S minecraft -d -m man touch

-d -m permet de détacher le screen immédiatement, puisque tu es dans un script et qu'un screen attaché dans un script ne sert pas beaucoup.

Au passage -x permet de se rattacher à un screen existant, mais si j'ai bien compris aucun screen n'existe au moment où te lance ton script, si ?

Dernière modification par WilQu (01/02/2011 22:41:40)

Hors ligne

#4 04/02/2011 11:16:31

saroum
Membre
Inscription : 04/02/2011
Messages : 5

Re : Exécuter un script sh dans un screen

Salut!

Il se trouve que je suis aussi en train de monter un serveur pour Minecraft, un tout petit serveur privé juste pour l'aventure (ouah!, l'aventure de ouf malade! :D)
J'ai des soucis, mais pas les mêmes que toi Koshie.

Pour lancer ton serveur Minecraft, voici un petit script qui marche très bien pour moi :

#!/bin/bash
screen -dmS minecraft java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui

Dans cette commande, le screen se lance détaché, je trouve ça plus pratique, mais c'est comme tu le sens. Il faut executer le script depuis le dossier ou se trouve le fichier minecraft.jar sinon marche pas. tu peux toujours rajouter un "cd ton_chemin_vers_le_bon_dossier" avant et un "cd ~" après.

En cherchant un peu partout sur le net, j'ai trouvé des gens qui gèrent leur serveur en tant que service. J'ai trouvé l'idée bien intéressante et je me suis lancé dans l'aventure.

Le but de la manoeuvre serait:

- me lever le matin, appuyer sur le bouton d'un pc avec fedora 14 dessus et le serveur minecraft, il s'allume, le serveur se lance proprement.
- je fais ma vie pendant la journée.
- le soir je me couche, j'appuie à nouveau sur le bouton du pc en question, le serveur minecraft se coupe proprement, le pc s'éteind, et à demain.
- le tout, sans avoir besoin de clavier, de souris ou de moniteur.

Dans mon service, il me faut donc au minimum une fonction pour démarrer le serveur mincraft, et une fonction pour l'arrêter (on en rajoutera d'autre plus tard si ca le fait :) )

j'ai donc fait un petit script, que j'ai placé dans le dossier /etc/init.d et rendu executable. A partir de là, j'ai tatonné un peu, en glannant des infos à droite et à gauche. Si je me gourre pas, il faudrait que mon service se lance au niveau 5, en tout dernier au démarrage de l'ordinateur, et qu'il s'arrête en tout premier à l'arrêt. j'ai donc écrit ce qu'il faut pour ça dans mon script et ajouté le service avec "chkconfig". En vérifiant, je vois bien que le service est réglé pour être en marche au niveau 5, et que mon service et mon serveur démarrent comme je le désire. Je me dis que finalement chui pas trop bête.

Revenons au script :

la fonction pour démarrer le serveur fonctionne correctement, dans un terminal, je tape :

$ service minecraft start

et je me retrouve avec un screen détaché dans lequel tourne mon serveur minecraft, auquel je peux accéder sans soucis.
C'est la fonction d'arrêt qui me pose problème. pour arrêter le serveur minecraft, il faut lui donner la commande "stop".
A la main, je rattache mon screen, j'envoie la commande stop au serveur, il fait sa sauvegarde et s'arrête, le screen se termine, retour à l'invite de commande.

Du coup je recherhe un moyen, depuis l'invite de commande, d'envoyer cette fonction "stop" au serveur, dans le screen détaché afin de l'intégrer à la fonction stop de mon service.

J'ai essayé ça :

screen -S minecraft -X stop

mais le screen me répond qu'il ne connait pas la commande stop.


Je viens donc vers vous Ô dieux du wired en quête d'aide et d'assistance dans cette aventure.

Hors ligne

#5 04/02/2011 14:18:20

saroum
Membre
Inscription : 04/02/2011
Messages : 5

Re : Exécuter un script sh dans un screen

Victoire! les amis Victoire!

donc pour info je laisse ici la commande qui me permet de demander au serveur de s'arrêter :

$ screen -S minecraft -X stuff stop
$ screen -S minecraft -X eval 'stuff \015'

Ca faisait 2 jours que je m'arrachais les cheveux pour trouver la seconde ligne. ^^
Ca soulage, comme d'aller pisser après 3 pintes de bière!

Hors ligne

Pied de page des forums