Lancement d'un script qui foire

Lancement d'un script qui foire - Divers - Linux et OS Alternatifs

Marsh Posté le 06-07-2006 à 11:43:27    

Bonjour, dans l but de lancer un serveur hlds sur une gentoo à chaque démarrage de la machine j'ai  un fichier lancé avec le rc-update.
 
Fichier :
 

Citation :

#!/sbin/runscript
 
depend() {
        # le démon a besoin de la fonction  internet
        need net  
}
 
start() {
        # affiche un message sur ce qui est fait
        ebegin "Starting HLDS server1"  
        # Lance le processus comme un démon et enregistre le pid
        start-stop-daemon --start --quiet --background --pidfile /var/run/serverhlds1.pid --make-pidfile --exec "screen -S server1 -m -d /home/server1/hlds_run -game cstrike +maxplayers 22 -noipx -autoupdate -tos +post 27015 +map de_dust2 -pingboost 3 -log 2"  
        # Affiche le succès ou l'échec
        eend $?
}
stop() {
        # affiche un message pour l'utilisateur  
        ebegin "Stopping HLDS server1"
        # arrete le démon en se servant du pid enregistré par la fonction start()
        start-stop-daemon --stop --quiet --pidfile /var/run/serverhlds1.pid --name server1
        # Affiche le succès ou l'échec
        eend $?
}


 
Le problème c'est que ça ne marche pas, quand je le lance j'obtient ça :

Citation :

/etc/init.d/server1 start
 * Re-caching dependency info (mtimes differ)...
 * Re-caching dependency info (mtimes differ)...
 * Re-caching dependency info (mtimes differ)...
 * Re-caching dependency info (mtimes differ)...
 * Starting HLDS server1 ...
start-stop-daemon: stat screen -S server1 -m -d /home/server1/hlds_run -game cstrike +maxplayers 22 -noipx -autoupdate -tos +post 27015 +map de_dust2 -pingboost 3 -log 2: No such file or directory      [ !! ]


 
Quelqu'un saurait-il me dire ou est mon erreur ?
 
Merci d'avance.
Siron

Reply

Marsh Posté le 06-07-2006 à 11:43:27   

Reply

Marsh Posté le 06-07-2006 à 12:34:33    

J'y connais rien mais je me demandes:
 
Tu es sur que ta 1ere ligne est correcte ?


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
Reply

Marsh Posté le 06-07-2006 à 12:36:57    

Oui casi.

Reply

Marsh Posté le 06-07-2006 à 12:39:02    

sans vouloir troller : ils peuvent pas faire des scripts d'init normaux gentoo ?


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 06-07-2006 à 12:43:28    

as-tu essayer d'utiliser un chemin absolu pour l'exécutable?

Reply

Marsh Posté le 06-07-2006 à 12:45:52    

Heu, c'est pas un chemin absolut ça ?
/home/server1/hlds_run
 
(je débute sous linux)

Reply

Marsh Posté le 06-07-2006 à 12:49:30    

Non, il parle de:


screen -S server1 -m -d /home/server1/hlds_run -game cstrike +maxplayers 22 -noipx -autoupdate -tos +post 27015 +map de_dust2 -pingboost 3 -log 2


 
C'est normal d'utiliser screen pour lancer ce serveur?
Un simple & ne suffirait pas.
Est-ce que tu as screen installé?
 
si tu tappes:


screen


 
et


whereis screen


 
il te renvoie quoi?

Reply

Marsh Posté le 06-07-2006 à 13:00:35    

Code :
  1. #!/sbin/runscript

ne serait pas hazard un alias de bash ou un lien ?

Reply

Marsh Posté le 06-07-2006 à 13:03:33    

Citation :

C'est normal d'utiliser screen pour lancer ce serveur?
Un simple & ne suffirait pas.
Est-ce que tu as screen installé?


 
Screen est installé et fonctionne.
Et même sans le screen j'ai le message d'erreur.
Sinon on utilise fréquemment screen pour lancer un serveur, et je trouve ça fort pratique.
 

Citation :

ne serait pas hazard un alias de bash ou un lien ?


Heu, c'est possible  :ange:  (j'ai suivi un tuto)
En tout cas /sbin/runscript existe.
 
Merci pour l'aide.


Message édité par Siron le 06-07-2006 à 13:05:47
Reply

Marsh Posté le 06-07-2006 à 13:07:56    

Si je tape screen ben il me lance un screen.
Si je tape whereis screen j'obtients :

Citation :


screen: /usr/bin/screen /usr/share/screen /usr/share/man/man1/screen.1.gz

Reply

Marsh Posté le 06-07-2006 à 13:07:56   

Reply

Marsh Posté le 06-07-2006 à 21:12:50    

Sinon y a pas moyen de faire plus simple pour lancer le serveur au démarrage ?

Reply

Marsh Posté le 06-07-2006 à 21:54:36    

Ce sont les argumants de screen et hlds qui coincent.
Mais j'ai absolument pas compris comment les faire passer, il se trouve que la documentation dispo sur internet et une traduction du man, et donc c'est toujours la même que je croise.
 
http://www.delafond.org/traducmanf [...] mon.8.html


Message édité par Siron le 06-07-2006 à 21:54:52
Reply

Marsh Posté le 07-07-2006 à 11:07:32    

il est possible au boot, init.d ne connais pas l'emplacement de screen... essaye de modifier ton script en mettant le schéma absolu pour le binaire (/usr/bin/screen au lieu de screen)

Reply

Marsh Posté le 07-07-2006 à 11:08:09    

PS. '-d' et autres options sont les options de la commande screen, pas de la commande start-stop-daemon

Reply

Marsh Posté le 07-07-2006 à 11:18:23    

En fait d'après ce que l'ai lu, il faut passer les parametres comme cela :
 
-- -d -x -y, ainsi comme ça, d, x et y seront passé au programme.
 
Mon problème c'est que je ne sais pas du tout comment faire pour mon cas, vu que j'ai 2 parties avec des parametres qui porte pas sur le même endroit.
 
J'ai testé un peu au hasard mais en vain.
 
Si je ne met pas le double - devant, il prend les arguments comme une partie du chemin et donc fatalement il ne trouve pas ce qu'il doit lancer.


Message édité par Siron le 07-07-2006 à 11:19:58
Reply

Marsh Posté le 07-07-2006 à 11:21:59    

as-tu essayé avec /usr/bin/screen?

Reply

Marsh Posté le 07-07-2006 à 11:25:47    

Non, en fait j'ai viré le screen pour le moment, j'essaye déjà de passer les paramettres que du hlds_run, mais même si je rajoute le double -, hlds_run m'indique que le parametre n'est pas valide.
 
Y a pas moyen de créer un sous script qui contient la ligne de commande et qui serait appelé par ce script-ci pour éviter d'avoir des arguments dans le --exec ?
 
(en fait je suis casi sur que il trouvera screen sans le chemin absolut).


Message édité par Siron le 07-07-2006 à 11:26:37
Reply

Marsh Posté le 07-07-2006 à 11:46:11    

que s'est passe-t-il si tu lance "à la main"

start-stop-daemon --start --quiet --background --pidfile /var/run/serverhlds1.pid --make-pidfile --exec "/usr/bin/screen -S server1 -m -d /home/server1/hlds_run -game cstrike +maxplayers 22 -noipx -autoupdate -tos +post 27015 +map de_dust2 -pingboost 3 -log 2"

Reply

Marsh Posté le 07-07-2006 à 11:52:02    

C'est pareil si je lance start-stop-daemon a la main.
 
Mais si je lance le screen et hlds sans le start-stop-daemon, alors ça fonctionne.

Reply

Marsh Posté le 07-07-2006 à 11:55:44    

si tu lance la commande, quel est l'erreur retourné?

Reply

Marsh Posté le 07-07-2006 à 11:58:14    

Si je lance avec start-stop-daemon, et que je met les guillemets, il m'indique qu'il trouve pas le répertoire existe pas (en gros il suporte pas les guillemets), sans les guillemets, il me dit que "-- l" n'est pas un paramètres valide (en gros les parametres de hlds et screen le perturbe).


Message édité par Siron le 07-07-2006 à 11:58:35
Reply

Marsh Posté le 07-07-2006 à 12:04:18    

OK.
 
1) Tu crée un script qui lance le machin (par ex. dans le répértoire /home/toto/bin et appelé lance_cs_server.sh:


#!/bin/sh
 
/usr/bin/screen -S server1 -m -d /home/server1/hlds_run -game cstrike +maxplayers 22 -noipx -autoupdate -tos +post 27015 +map de_dust2 -pingboost 3 -log 2


 
2) tu modifie ton script  


#!/sbin/runscript
 
depend() {
        # le démon a besoin de la fonction  internet
        need net  
}
 
start() {
        # affiche un message sur ce qui est fait
        ebegin "Starting HLDS server1"  
        # Lance le processus comme un démon et enregistre le pid
        start-stop-daemon --start --quiet --background --pidfile /var/run/serverhlds1.pid --make-pidfile --exec /home/toto/bin/lance_cs_server.sh
        # Affiche le succès ou l'échec
        eend $?
}
stop() {
        # affiche un message pour l'utilisateur  
        ebegin "Stopping HLDS server1"
        # arrete le démon en se servant du pid enregistré par la fonction start()
        start-stop-daemon --stop --quiet --pidfile /var/run/serverhlds1.pid --name server1
        # Affiche le succès ou l'échec
        eend $?
}


 
Le problème de cette solution est que le pid contenu dans /var/run/serverhlds1.pid est le pid du shell (le pid du screen est le pid du shell+1), etc.

Reply

Marsh Posté le 07-07-2006 à 12:11:17    

Salut moi je fais comme ca pour lancer vdr dans un screen
 
dans /etc/init.d/vdr
lancement du daemon vdr  

Citation :

#!/bin/sh  
 #  
 # /etc/init.d/vdr  
 
 
 case "$1" in  
     start)  
         echo -n "Vdr start : "  
         /home/zaverel/vdr/screen_run_vdr.sh
         echo "done."  
         ;;  
     screen)  
         echo -n "Vdr screen ... "  
           screen -r
         echo "done."  
         ;;  
     *)  
         echo "start ou screen ?"  
         ;;  
 esac  


 
lancement de screen qui lance le fichier run
screen_run_vdr.sh
 

Citation :

#!/bin/sh
cd /home/zaverel/vdr
 screen -d -m -S vdr ./run.sh  


 
dans run.sh  , tu met lacommande pour lancer ton serveur hlds
C'est à adapter à ton cas .
Les fichiers screen_run_vdr.sh et run.sh doivent etre executable
Par contre c'est lancé sous le compte root .
 
 :hello:

Reply

Marsh Posté le 07-07-2006 à 12:34:08    

Je suis en train de tester avec

Citation :

#!/bin/sh
 
/usr/bin/screen -S server1 -m -d /home/sever1/hlds_run -game cstrike +maxplayers 22 -noipx -autoupdate -tos +post 27015 +map de_dust2 -pingboost 3 -log 2


 
Mais il n'a pas l'air de lancer hlds.
 
Sinon Zaverell, on peut lancer sur un compte autre que le root ?

Reply

Marsh Posté le 07-07-2006 à 12:49:49    

certes, lancé la chose en root peut-être intéressant pour les ressources, etc. mais imaginons que quelqu'un a trouvé une faille dans le code du serveur qui permet d'exécuter du code sur la machine... En cas de root, le cracker aura un accès root!

Reply

Marsh Posté le 07-07-2006 à 13:04:30    

on doit pouvoir lancer le serveur sous un autre compte en placant un su  -  *utilisateur* mais ca peut entrainer des problemes de locales ( à voir si c'est genant ou pas )
 

Citation :

#!/bin/sh
cd /home/zaverel/vdr  
su  -  *utilisateur* screen -d -m -S vdr ./run.sh  


 
 
sinon essaie avec des quotes  "    "
 

Citation :

#!/bin/sh
 
/usr/bin/screen -S server1 -m -d "/home/sever1/hlds_run -game cstrike +maxplayers 22 -noipx -autoupdate -tos +post 27015 +map de_dust2 -pingboost 3 -log 2"

Reply

Marsh Posté le 08-07-2006 à 13:55:12    

En fait je crois que la source du problème vient du fait que je ne peux pas lancer le serveur en root :
Hlds m'indique que le paramètre -game cstrike n'est pas bon.
Alors que sous l'user server1 y a aucun problème.
Etrange non ?

Reply

Marsh Posté le 08-07-2006 à 21:39:43    

Personne a déjà été confronté au problème ?

Reply

Marsh Posté le 09-07-2006 à 11:28:51    

Bon, j'ai rajouté un su server1 dans le fichier avec la ligne de commande pour lancer le serveur (vu que celui-ci ne veut pas se lancer en root) : grossière erreur !!!  :whistle:  
 
Je crois que le serveur lance ssh et plein de truc après le script du serveur, quité le mode root, il ne voulait plus lancé ssh et tout le reste (ftp, ...), j'ai donc perdu tout mes accès à la machine (et le serveur ne c'est pas lancé pour autant).
 
Bref après passage au mode rescue de ovh pour virer ma boulette, je me retrouve au point de départ.
Le seul point positif c'est que j'apprends un paquet de truc sur ce qu'il ne faut pas faire sous linux.  [:aztechxx]  
 
Y a personne qui peut me dire pourquoi il refuse de lancer le serveur ? (ou bien comment lancer le serveur sous l'user server1 au boot de la machine ?)  
 
 :sweat:  :(


Message édité par Siron le 09-07-2006 à 11:31:40
Reply

Marsh Posté le 09-07-2006 à 11:57:52    

Récupère un ligne de commande qui fonctionne avec l'user server1, et mets dans un script un truc du genre:
 


su server1 -c "cd ~ && commande"


Message édité par simple_stupid le 09-07-2006 à 12:04:35
Reply

Marsh Posté le 09-07-2006 à 12:01:28    

Heu, manque pas un nom d'utilisateur dans ta ligne ?
Et le cd est toujours nécéssaire si dans la ligne de commande j'utilise les chemins absoluts ?


Message édité par Siron le 09-07-2006 à 12:01:54
Reply

Marsh Posté le 09-07-2006 à 12:04:00    

Oups, il manque bien sûr le nom de l'utilisateur.
Le cd, on ne sait jamais, c'est pour que le pwd du processus soit bien le home directory (histoire qu'il puisse créer les répertoires qui vont bien, etc).

Reply

Marsh Posté le 09-07-2006 à 12:11:08    

Donc ça donne ça, je testerais tantôt car la si ça plante comme y a 1 heure j'aurais pas le temps de relancer le systeme.
 

Citation :

#!/bin/sh
su server1 -c "cd ~ && /usr/bin/screen -S server1 -m -d /home/server1/hlds_run -game cstrike +maxplayers 22 -noipx -autoupdate -tos +post 27015 +map de_dust2 -pingboost 3 -log 2"


 
Et si ça marche  :)  je n'aurais plus qu'a trouver comment stoper le serveur avec etc/init.d/server1 stop.
 
Sinon par curiosité, pourquoi le serveur ne se lance pas en root (avec une simple commande de lancement) ?, hlds me dit que le premier paramètre n'est pas valide.


Message édité par Siron le 09-07-2006 à 12:11:30
Reply

Marsh Posté le 09-07-2006 à 12:31:36    

Pour des raisons de sécurité, peut-être qu'il ne veut pas se lancer en root, ce qui est plutôt sage.

Reply

Marsh Posté le 09-07-2006 à 15:03:21    

Je veux bien que ce soit sage, mais si c'est le cas ce serait sympas d'avoir un message d'erreur adequa.
 
Sinon avec ce que tu ma dit simple_stupid, le server se lance bien  :jap:  
 
Maintenant pour le stopper avec etc/init.d/server1 stop :
il refuse parceque le pid n'est pas le même que celui qui est dans le fichier server1.pid (à cause du shel je crois), mais je crois que y a moyen de tuer le processus avec le nom du screen ou le nom du processus hlds (prefere avec le nom du screen car si y a plusieur serveur hlds) ?

Reply

Marsh Posté le 09-07-2006 à 15:21:01    

Pour stopper avec "etc/init.d/server1 stop" j'ai mis ça dans le fichier qui regle le start-stop-daemon :
 

Citation :

start-stop-daemon --stop --quiet --user server1


 
Et ça marche (normalement y a quel server1 qui est lancé sous l'user server1).
 
Donc mes problèmes sont reglés.
Merci pour l'aide qui m'a été très nutile.
Siron

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed