Lancement d'un script qui foire - Divers - Linux et OS Alternatifs
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 ?
Marsh Posté le 06-07-2006 à 12:39:02
sans vouloir troller : ils peuvent pas faire des scripts d'init normaux gentoo ?
Marsh Posté le 06-07-2006 à 12:43:28
as-tu essayer d'utiliser un chemin absolu pour l'exécutable?
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)
Marsh Posté le 06-07-2006 à 12:49:30
Non, il parle de:
|
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:
|
et
|
il te renvoie quoi?
Marsh Posté le 06-07-2006 à 13:00:35
Code :
|
ne serait pas hazard un alias de bash ou un lien ?
Marsh Posté le 06-07-2006 à 13:03:33
Citation : C'est normal d'utiliser screen pour lancer ce serveur? |
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 (j'ai suivi un tuto)
En tout cas /sbin/runscript existe.
Merci pour l'aide.
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 : |
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 ?
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
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)
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
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.
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).
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" |
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.
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).
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:
|
2) tu modifie ton script
|
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.
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 |
lancement de screen qui lance le fichier run
screen_run_vdr.sh
Citation : #!/bin/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 .
Marsh Posté le 07-07-2006 à 12:34:08
Je suis en train de tester avec
Citation : #!/bin/sh |
Mais il n'a pas l'air de lancer hlds.
Sinon Zaverell, on peut lancer sur un compte autre que le root ?
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!
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 |
sinon essaie avec des quotes " "
Citation : #!/bin/sh |
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 ?
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 !!!
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.
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 ?)
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:
|
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 ?
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).
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 |
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.
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.
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
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) ?
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
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 :
#!/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 :
/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