Creer un auto restart de process

Bonjour tout le monde, je possède un serveur Counter Strike sous debian ETCH.
J’aimerais automatiser le processus pour que dès que j’allume la machine je ne m’occupe de rien.

Pour le moment j’effectue tout à la main :

  • je me logue en ROOT
  • je stoppe le serveur graphique " /etc/init.d/gdm stop "
  • je me logue en USER
  • je change de répertoire "cd /counter_strike/ "
  • je lance le serveur Counter-Strike "./hlds_run "

J’aimerais si cela est possible avoir les architectures pour pouvoir scripter.

Je pense que les cron peuvent être utiliser pour qu’au démarrage de la machine le serveur graphique stoppe.

Je pense aussi utiliser les cron pour faire un test toutes les 3 minutes si le processus du serveur counter strike est lancé et s’il ne l’ai pas : le démarrer. Pour que si je kill le serveur depuis le jeux ou s’il bug il redémarre quelques minutes plus tard.

Je ne m’y connais pas du tout en script bash c’est pourquoi je viens vous demander de l’aide.

Merci beaucoup.

En fait t’a pas besoin de script bash pour ça enfin à peu près.

Il vaut mieux ne pas lancer le server graphique du tout je pense. Pour ça c’est l’init qu’il faut bidouiller soit en lui disant de ne pas lancer le server X soit en créant un nouveau niveau d’execution (3, 4 ou 5) (si je ne me trompe pas).

Ensuite faut créer un p’tit script :

[code]#!/bin/bash

/counter_strike/hlds_run[/code]

Et le faire exécuter au démarrage par init.

Et pour faire un test qui démarrerait le processus au cas ou il ne serais pas lancé ?

Ca peut se faire comment ? :blush:

bonsoir,

SELF=/counter_strike/hlds_run if [ "$(ps aux | grep $SELF | awk '{print $11}' | grep $SELF)" == "" ]; then $SELF & else : # le serveur tourne fisommairement …

Merci beaucoup.

Mais j’aimerais aussi comprendre comment ca marche.
La fonction SELF definit le programme en question ?

Je ne comprend pas bien la ligne

Il fait quoi exactement ici ? Autre que tester si le processus est lancé.

Autre petite question ? Le fi a la fin sert pour terminer un script ? :blush:

Merci pour votre aide, tout ceci est nouveau pour moi et j’aimerais vraiment comprendre :unamused:

http://abs.traduc.org/

bonjour,
ps aux est une commande qui liste les processus
le caractère | est un pipe, un pont entre la sortie d’une commande et l’entrée d’une autre commande .
donc, on dirige la sortie la liste des process en cours vers grep qui filtre la liste pour ne garder que les lignes où apparaissent le motif qu’on a défini dans une variable SELF, (toto ça marche pareil), puis on continue de filtrer la liste en ne gardant que le champ qui contient le nom du process. On refiltre sur SELF pour ne pas garder en résultat la ligne de notre commande elle même (le grep $SELF, qui apparait aussi dans les résultat puisqu’il contient $SELF).
si le résultat de la commande, placé entre $() est une chaine vide, c’est qu’aucun process correspondant n’a été trouvé, mais on pourrait faire aussi :

if ps aux | grep $SELF | awk '{print $11}' | grep $SELF; then vu que le dernier grep renvoie 0 si SELF est trouvé, et que if … then accepte comme vrai une valeur de retour équivalant à 0.
$SELF & est interprété par bash comme /counter_strike/hlds_run et on le lance en background avec &. Il y a mieux mais en faire un daemon, c’est un peu plus coton …
else : équivaut à sinon ne rien faire (le : est une façon d’écrire une instruction vide, car else attend une instruction, même vide, mais pas rien).

man ps les gars hein

ps -c c’est pas fais pour les chiens !

Pi, quand vous faites ça ps aux |grep blabla, faut aussi grep -v grep!

A+

[quote=“ed”]Pi, quand vous faites ça ps aux |grep blabla, faut aussi grep -v grep![/quote]je comprend que tu n’aie pas lu mon speach ed :wink: , mais j’explique que le dernier grep est un équivalant de ton grep -v grep … :smiley:

‘ps’: je vois pas en quoi ps -c fait avancer le shmilimili … le shmlimi … le … :confused:

       -C cmdlist      Select by command name.
                       This selects the processes whose executable name is
                       given in cmdlist.

Shame on me, c’est un grand c

[quote=“usinagaz”]bonsoir,

SELF=/counter_strike/hlds_run if [ "$(ps aux | grep $SELF | awk '{print $11}' | grep $SELF)" == "" ]; then $SELF & else : # le serveur tourne fisommairement …[/quote]

“else” est il obligatoire?

[quote]if [ cond ] then
instruction
fi[/quote]

doit aussi bien fonctionner. Sinon on peut passer par un || mais c’est moins lisible.

bonsoir,
merci ed pour le tuyau -C :smiley: , c’est mieux …

HDLS=/counter_strike/hlds_run ! ps -C $HDLS && $HDLS &
j’ai mis le else, mais c’est facultatif, tout dépend des tests qu’on veut faire …

Pour expliquer à kresta, le && représente le “et alors”.
On exécute la première commande si elle est vrai on exécute la seconde.

C’est le même principe que pour :

Merci beaucoup pour toutes vos explications.
Je suis desole du retard mais en se moment j’ai pas beaucoup de temps a moi.
Je vais essayer ca et vous en faire un retour le plus vite possible.
Merci pour tout.

Pour faire tourner un process en permanence, il y a la possibilité de le mettre en respawn dans l’inittab:
trustonme.net/didactels/283. … it_EXEMPLE
autre remarque, si tu veux pouvoir accèder à ton serveur CS pour y changer des paramêtres ou faire de manips, il est interessant de le lancer dans un screen, même en respawn, pour pouvoir se reconnecter à la session en cours de partie (apt-get install screen, man screen).