Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/03/2011, 03h40   #1
Membre Expert
 
Avatar de prgasp77
 
Homme Yankel Scialom
Ingénieur en systèmes embarqués
Inscription : juin 2004
Messages : 811
Détails du profil
Informations personnelles :
Nom : Homme Yankel Scialom
Âge : 25
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Ingénieur en systèmes embarqués
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juin 2004
Messages : 811
Points : 1 039
Points : 1 039
Par défaut Lancement d'un serveur au démarage

Bonjour à tous.

---

Résumé pour les pressés : J'aimerais lancer un serveur au boot par un utilisateur spécifique et avoir si besoin est accès aux entrées/sorties standards du serveur quand j'en ai envie.

---

J'aimerais sur ma Debian ajouter un serveur Minecraft. Pour cela, j'aimerais que la commande "/usr/bin/java -Xmx1024M -Xms1024M -jar /home/minecraft/minecraft_server.jar nogui" soit exécutée automatiquement au boot.

Pour l'instant, j'ai créé un script de la forme suivante. Il fonctionne plutôt bien, et lance et arrête le serveur via "minecraft start" et "minecraft stop". J'ai pensé pour terminer le tout ajouter ce script dans /etc/init.d/ et tout ... mais j'ai compris que ça n'aurait pas l'effet escompté.
Code sh :
1
2
3
4
5
6
7
8
9
10
#! /bin/sh
root=/home/minecraft
case $1 in
start)
	start-stop-daemon --start --background --pidfile $root/pid --make-pidfile --exec /usr/bin/java -- -Xmx1024M -Xms1024M -jar $root/minecraft_server.jar nogui 
	;;
stop)
	start-stop-daemon --stop --pidfile $root/pid
	;;
esac


En effet, de cette façon, je rencontrerais plusieurs inconvénients :
  • Pour des raisons de sécurité, j'aimerais que ce soit l'utilisateur minecraft (crée à cet effet) qui lance le serveur, et non root. Hors, /sbin/start-stop-daemon est bien entendu réservé à root ;
  • Ce serveur lance une console qui permet des actions spécifique. En procédant comme décrit plus haut, je perds (je crois) toute possibilité de lire et écrire dans cette console


Si vous aviez la moindre idée de comment régler mon problème, je suis preneur.
Merci d'avance.
__________________
gasp in touch
-- Yankel Scialom
prgasp77 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/03/2011, 06h20   #2
Modérateur
 
Avatar de paissad
 
Homme Papa I. DIAKHATE
Étudiant
Inscription : avril 2006
Messages : 602
Détails du profil
Informations personnelles :
Nom : Homme Papa I. DIAKHATE
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2006
Messages : 602
Points : 1 419
Points : 1 419
bonjour, si tu veux lancer le script avec l'utilisateur "minecraft", utilise l'option --chuid de start-stop-daemon
__________________
Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
Modérateur aux rubriques Linux/Unix et au chat du site.
http://blog.paissad.net
paissad est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 07/03/2011, 11h30   #3
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Je suppose que si tu lances en mode daemon, tu ne peux pas accéder aux e/s du programme (sauf s'il s'agit vraiment d'un daemon et que tu peux lancer un client ou autre chose qui va se connecter dessus quand tu veux y accéder) : c'est le principe même d'un daemon.

Pour moi, je pense qu'il faudrait que tu changes ton script ainsi :

1) la partie start lance sous le user minecraft (sudo) une commande screen ... qui va démarrer ton serveur mais en l'encapsulant dans un terminal virtuel. Tu en profites pour stocker le pid de ton serveur.
2) la partie stop kill ton process avec le pid et termine le screen

Comme ça, tu devrais pouvoir te connecter au screen si tu veux accéder à ton serveur avec ton utilisateur...
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 08/03/2011, 12h59   #4
Membre Expert
 
Avatar de prgasp77
 
Homme Yankel Scialom
Ingénieur en systèmes embarqués
Inscription : juin 2004
Messages : 811
Détails du profil
Informations personnelles :
Nom : Homme Yankel Scialom
Âge : 25
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Ingénieur en systèmes embarqués
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juin 2004
Messages : 811
Points : 1 039
Points : 1 039
Bonjour,
en effet l'usage de l'option --chuid devrait régler le soucis de l'utilisateur (mes excuses, j'avais mal compris cette option dans le man). L'usage de screen semble aussi fonctionner (est-ce bien compatible avec start-stop-daemon ? Je vais le découvrir d'ici peu quoi qu'il en soit).

En revanche, je bloque maintenant sur un dernier point : le dossier courant doit être un autre dossier que / ... ce qui semble être incompatible avec un daemon (n'est-ce pas ?).

Avec vous une solution pour régler le dossier d'exécution ou une alternative au daemon ? Merci beaucoup pour votre aide.
__________________
gasp in touch
-- Yankel Scialom
prgasp77 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 08/03/2011, 13h57   #5
Modérateur
 
Avatar de paissad
 
Homme Papa I. DIAKHATE
Étudiant
Inscription : avril 2006
Messages : 602
Détails du profil
Informations personnelles :
Nom : Homme Papa I. DIAKHATE
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2006
Messages : 602
Points : 1 419
Points : 1 419
l'option --chdir ou -d de start-stop-daemon devrait changer le "repertoire de démarrage".
encore une fois "man start-stop-daemon"
__________________
Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
Modérateur aux rubriques Linux/Unix et au chat du site.
http://blog.paissad.net
paissad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/03/2011, 16h22   #6
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Citation:
Envoyé par prgasp77 Voir le message
L'usage de screen semble aussi fonctionner (est-ce bien compatible avec start-stop-daemon ?
Compatible ou pas, je ne sais pas, mais pour moi, un daemon est rattaché au process init (1), or, si tu lances un truc avec screen, ça sera rattaché à ton process SCREEN, donc ça n'est pas un daemon.

Citation:
Envoyé par prgasp77 Voir le message
Avec vous une solution pour régler le dossier d'exécution ou une alternative au daemon ? Merci beaucoup pour votre aide.
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/03/2011, 04h37   #7
Membre Expert
 
Avatar de prgasp77
 
Homme Yankel Scialom
Ingénieur en systèmes embarqués
Inscription : juin 2004
Messages : 811
Détails du profil
Informations personnelles :
Nom : Homme Yankel Scialom
Âge : 25
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Ingénieur en systèmes embarqués
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juin 2004
Messages : 811
Points : 1 039
Points : 1 039
Citation:
Envoyé par paissad Voir le message
encore une fois "man start-stop-daemon"
Arf! Deux fois .

Bon, je pense avancer dans mon projet ... Voici où j'en suis :
Code :
1
2
3
start-stop-daemon --start --chdir /home/minecraft --exec /usr/bin/screen -- \
-dmS minecraft /usr/bin/java -Xmx1024M -Xms1024M -jar \
/home/minecraft/minecraft_server.jar nogui
Cela fonctionne (lance le serveur et le détache immédiatement ; si par la suite je veux accéder à la console du serveur, je screen -r minecraft). J'aimerais maintenant pouvoir jouir de l'option --chuid gentillement révélée par paissad. Le soucis (je pense), c'est que seul root à le droit d'écrire dans /var/run/screen/S-root/ où sont, a priori, stockés les screens en cours d'existence. Ainsi, avec le --chuid, impossible de rattacher la console .

En attendant vos lumières, je vais bosser mes man.
Encore merci.


EDIT : non le soucis est ailleurs, il faut à mon avis opérer différemment étant donné que je veux récupérer une session de l'utilisateur minecraft depuis un autre utilisateur (minecraft n'ayant pas de shell (/bin/false)).
__________________
gasp in touch
-- Yankel Scialom
prgasp77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 04h57   #8
Modérateur
 
Avatar de paissad
 
Homme Papa I. DIAKHATE
Étudiant
Inscription : avril 2006
Messages : 602
Détails du profil
Informations personnelles :
Nom : Homme Papa I. DIAKHATE
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2006
Messages : 602
Points : 1 419
Points : 1 419
je ne vois pas la raison pour laquelle tu veux ajouter screen dans le start-stop-daemon, normalement, tu n'en n'as pas besoin
Code :
start-stop-daemon --start --chdir /home/minecraft --exec /usr/bin/java -Xmx1024M -Xms1024M -jar /home/minecraft/minecraft_server.jar nogui
il me semble que ceci devrait suffir

moi, j'aurais fait comme ceci:

Code :
1
2
3
4
5
6
7
8
9
10
 
DAEMON="/usr/bin/java"
DAEMON_USER="user"
DAEMON_HOME="/home/minecraft"
DAEMON_OPTS="-Xmx1024M -Xms1024M -jar nogui $DAEMON_HOME/minecraft_server.jar"
 
start-stop-daemon --start --quiet --background --oknodo \
--chdir $DAEMON_HOME \
--chuid $DAEMON_USER \
--exec $DAEMON -- $DAEMON_OPTS
__________________
Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
Modérateur aux rubriques Linux/Unix et au chat du site.
http://blog.paissad.net
paissad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 05h14   #9
Membre Expert
 
Avatar de prgasp77
 
Homme Yankel Scialom
Ingénieur en systèmes embarqués
Inscription : juin 2004
Messages : 811
Détails du profil
Informations personnelles :
Nom : Homme Yankel Scialom
Âge : 25
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Ingénieur en systèmes embarqués
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juin 2004
Messages : 811
Points : 1 039
Points : 1 039
Ce serveur minecraft écrit et lit dans les entrées/sorties standards. J'ai parfois besoin de cette "console" pour administrer le serveur. L'idée était donc de l'encapsuler dans un screen et de la ré-attacher temporairement en cas de besoin.
__________________
gasp in touch
-- Yankel Scialom
prgasp77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 05h18   #10
Modérateur
 
Avatar de paissad
 
Homme Papa I. DIAKHATE
Étudiant
Inscription : avril 2006
Messages : 602
Détails du profil
Informations personnelles :
Nom : Homme Papa I. DIAKHATE
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2006
Messages : 602
Points : 1 419
Points : 1 419
désolé alors
je connais screen, mais je ne l'utilise pas, je ne pourrais te guider.
__________________
Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
Modérateur aux rubriques Linux/Unix et au chat du site.
http://blog.paissad.net
paissad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 10h46   #11
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Lances le screen depuis ton utilisateur classique, et fais un sudo avant de passer la commande ?

Il faut évidemment que tu autorise ton utilisateur à faire du sudo sur minecraft
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 16h35   #12
Membre Expert
 
Avatar de prgasp77
 
Homme Yankel Scialom
Ingénieur en systèmes embarqués
Inscription : juin 2004
Messages : 811
Détails du profil
Informations personnelles :
Nom : Homme Yankel Scialom
Âge : 25
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Ingénieur en systèmes embarqués
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juin 2004
Messages : 811
Points : 1 039
Points : 1 039
Tant qu'à permettre à l'utilisateur minecraft d'avoir un shell, autant faire ce que propose paissad. Tout fonctionne à merveille.

$cat /etc/init.d/minecraft
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#! /bin/sh
### BEGIN INIT INFO
# Provides:          minecraft-server
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript
# Description:       Run a Minecraft server in a virtual tty (screen)
### END INIT INFO
 
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Minecraft Server"
NAME=minecraft
DAEMON=/usr/bin/screen
SUBDAEMON=/usr/bin/$NAME
DAEMON_ARGS="-dmS $NAME $SUBDAEMON"
DIR=/home/$NAME
PIDFILE=$DIR/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
 
# Exit if the package is not installed
[ -x "$DAEMON" -a -x "$SUBDAEMON" ] || exit 0
 
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
 
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
 
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
 
#
# Function that starts the daemon/service
#
do_start()
{
       # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- test > /dev/null\
                || return 1
        start-stop-daemon --start --chdir $DIR --chuid $NAME --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS \
                || return 2
        # Add code here, if necessary, that waits for the process to be ready
        # to handle requests from services started subsequently which depend
        # on this one.  As a last resort, sleep for some time.
}
 
#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        # Wait for children to finish too if this is a daemon that forks
        # and if the daemon is only ever run from this initscript.
        # If the above conditions are not satisfied then add some other code
        # that waits for the process to drop all resources that could be
        # needed by services started subsequently.  A last resort is to
        # sleep for some time.
        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -f $PIDFILE
        return "$RETVAL"
}
 
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
        #
        # If the daemon can reload its configuration without
        # restarting (for example, when it is sent a SIGHUP),
        # then implement that here.
        #
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
        return 0
}
 
case "$1" in
  start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
       case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  #reload|force-reload)
        #
        # If do_reload() is not implemented then leave this commented out
        # and leave 'force-reload' as an alias for 'restart'.
        #
        #log_daemon_msg "Reloading $DESC" "$NAME"
        #do_reload
        #log_end_msg $?
        #;;
  restart|force-reload)
        #
        # If the "reload" option is implemented then remove the
        # 'force-reload' alias
        #
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
        #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 3
        ;;
esac
 
:
$cat /usr/bin/minecraft
Code :
1
2
3
4
5
6
7
8
#!/bin/sh
home=/home/minecraft
java=/usr/bin/java
jar=$home/minecraft_server.jar
pidfile=$home/minecraft.pid
 
echo $$ > $pidfile
$java -Xmx1024M -Xms1024M -jar $jar
Lorsque l'utilisateur minecraft se logue, il n'a plus qu'à screen -r [minecraft].

Merci à vous deux.
__________________
gasp in touch
-- Yankel Scialom
prgasp77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 16h46   #13
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Juste pour ma culture personnelle : tu as fait quoi finalement ?
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h43.


 
 
 
 
Partenaires

Hébergement Web