# [gentoo]Creer un script temporisé ....

## claudecs

Bonjour, je cherche à creer un script temporisé sous gentoo .

voila l'application par une page php je lance un script mais je voudrais que se script s'arrete tous seul au bout de 3 heures, je viens de faire quelques recherchs à gauche et a droite et etant un "noob" sur la programmation j'aurais besoin d'un serieu coup de main pour comprendre comment faire .

Pourriez vous me donnez quelques tuyaux merci beaucoup .Last edited by claudecs on Tue Jul 22, 2008 8:56 pm; edited 1 time in total

----------

## geekounet

Salut et bienvenue ! Peux-tu mettre ton titre du topic en conformité avec les conventions de notre forum s'il te plait ? Merci  :Smile: 

Pour ton script, soit t'implémentes ça dedans, avec un timer ou je ne sais quoi qui le tue au bout de 3h... soit tu fais ça par une tâche cron qui va tuer le script si sa durée d'execution dépasse 3h...

Je laisse qq'un d'autre détailler mieux que ça, j'ai pas tellement de temps là  :Razz: 

----------

## Bapt

Avec zsh tu peux jouer avec le module datetime pour etre précis, sinon ce qu'il faut que tu fasses c'est un script dont au début il récupère son pid, 

dans ton script tu fork avec un sleep qui attend 3h et kill le processus père.

genre 

PID=$$

(sleep 10800 && kill -15 ${PID})&

le reste de ton script

----------

## Magic Banana

Avec le même état d'esprit, j'avais écris un script Bash (Shell ?) similaire :

```
#!/bin/bash

if [ -z "$2" ]

then

    echo "Usage: wak command timeout"

    exit 64

fi

($1

# Just to let the time to the sleep $2 to initiate in case of an almost instantenous execution of $1

sleep 1

killall sleep)&

sleep $2 && pkill -f "$1" && exit 1

exit 0
```

Tu enregistres ça dans un répertoire de ta variable PATH (typiquement /usr/bin), le rends exécutable (chmod a+x SCRIPT) et l'appelle avec en première argument ta commande (à mettre entre guillemets si elle est en plusieurs mots) et en second argument le temps alloué (e.g., 10s, 2m, 3h). Cette commande renvoie 0 si la commande s'est terminée avant le temps imparti et 1, sinon. C'est très utile à l'intérieur d'un script (si la commande c'est terminée, fais ça sinon fais ça, ou encore exécute ces commandes jusqu'à ce que l'une d'entre elle se termine à temps).

@Bapt

Sauf erreur de ma part, dans le code que tu proposes, le sleep 10800 continue à tourner même si la commande s'est terminée. Ainsi, si le timeout n'est qu'une sécurité utilisée alors que des milliers de commandes (normalement rapides) sont exécutées, tu vas avoir autant de sleep qui traînent et autant de kill qui vont échouer. Je me trompe ?Last edited by Magic Banana on Tue Jul 22, 2008 10:45 am; edited 1 time in total

----------

## Bapt

@Magic Banana, pas faux, pour sela il suffira de rajouter un kill -15 ${PID} tout à la fin du script, comme ça si il a finit son execution, il tu se tue, donc tue le fork.

----------

## claudecs

Bonjour et tous d'abord merci de participer çà se poste ;

Geekounet je viens de lire le topics desolé je vais essaye de préciser un peu plus .

Donc voila j'ai un script de lancement pour un serveur de jeu sous gentoo, je suis chez ovh et j'ai un serveur dedié installé avec leur release ovh 2 en 32 bits .

au passage je met la totalité du script de lancement ici ici car il fonctionne niquel !

```
#!/bin/sh

#############################################

##     Script de lancement des serveur     ##

#############################################

#############################################

##          Début des variables            ##

#############################################

# Nom de l'utilisateur

SRCDS_USER=""

# Nom du screen

SRCDS_NAME=""

# Binaire du serveur

SRCDS_BIN="./srcds_run"

# Repertoire du serveur

SRCDS_PATH=""

# Options de lancement

SRCDS_OPTS="-game cstrike +maxplayers 32 +map zm_little_city_v2 -port 27045 -tickrate 66 -pingboost 3 +fps_max 101 -command update"

# Ligne de commande pour l'update

#STEAM_UPDATE="./steam -command update -game "Counter-Strike Source""

#############################################

##            Fin des variables            ##

#############################################

usage() {

    echo "---------------------------------------------------------------------"

    echo "Usage: ${SRCDS_NAME} (stop|start|restart|update|patch)"

    echo "---------------------------------------------------------------------"

    exit 2

}

if [ -z $1 ]; then

    usage

fi

srcds_start() {

    echo "---------------------------------------------------------------------"

    echo "Lancement du serveur : Debut de la sequence"

    echo "---------------------------------------------------------------------"

    #OWD=`pwd`

    cd ${SRCDS_PATH}

    #su ${SRCDS_USER} -c "screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}"

screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}

    #cd $OWD

    echo "---------------------------------------------------------------------"

    echo "Lancement du serveur : Fin de la sequence"

    echo "---------------------------------------------------------------------"

}

srcds_stop() {

    echo "---------------------------------------------------------------------"

    echo "Arret du serveur : Debut de la sequence"

    echo "---------------------------------------------------------------------"

    #su ${SRCDS_USER} -c "screen -dr ${SRCDS_NAME} -X quit"

screen -dr ${SRCDS_NAME} -X quit

    echo "---------------------------------------------------------------------"

    echo "Arret du serveur : Fin de la sequence"

    echo "---------------------------------------------------------------------"

}

srcds_restart() {

    echo "---------------------------------------------------------------------"

    echo "Reboot du serveur : Debut de la sequence"

    echo "---------------------------------------------------------------------"

    srcds_stop

    srcds_start

    echo "---------------------------------------------------------------------"

    echo "Reboot du serveur : Fin de la sequence"

    echo "---------------------------------------------------------------------"

}

srcds_update() {

    echo "---------------------------------------------------------------------"

    echo "Reboot du serveur avec mise a jour : Debut de la sequence"

    echo "---------------------------------------------------------------------"

    srcds_stop

    OWD=`pwd`

    cd $SRCDS_PATH

    su ${SRCDS_USER} -c "${STEAM_UPDATE}"

    cd $OWD

    srcds_patch

    srcds_start

    echo "---------------------------------------------------------------------"

    echo "Reboot du serveur avec mise a jour : Fin de la sequence"

    echo "---------------------------------------------------------------------"

}

srcds_patch () {

   echo "---------------------------------------------------------------------"

   echo "Lancement du patch pour Gameinfo.txt : Debut de la sequence"

   echo "---------------------------------------------------------------------"

   echo "Resultat :"

   ${SRCDS_PATH}dod/gameinfopatch.sh

   echo "Copie du fichier motd.bak en motd.txt"

   rm -f ${SRCDS_PATH}dod/motd.txt

   cp ${SRCDS_PATH}dod/motd.bak ${SRCDS_PATH}dod/motd.txt

   echo "Attribution des droits"

   chown ${SRCDS_USER} ${SRCDS_PATH}dod/motd.txt

   chown ${SRCDS_USER} ${SRCDS_PATH}dod/gameinfo.txt

   echo "---------------------------------------------------------------------"

   echo "Fin du patch pour Gameinfo.txt : Fin de la sequence"

   echo "---------------------------------------------------------------------"

}

case $1 in

    stop)

        srcds_stop

    ;;

    start)

        srcds_start

    ;;

    restart)

        srcds_restart

    ;;

    update)

        srcds_update

    ;;

    patch)

        srcds_patch

    ;;  

    *)

        usage

esac

exit 0
```

Pour ma team je souhaite le mettre à disposition quelques serveur war qu'il demarre d'eux même d'un page en php sécurisé sur notre site .

Pour cela j'ai l'habitude d'inserer ce code : (qui marche impec aussi lol)

```

<?php 

if (!empty($_POST)) {  

    echo 'Le serveur ';  

    if (isset($_POST['bouton2'])) {  

        echo '1 vas etre Rebotter';

        system("bash /etc/init.d/serveur1.sh restart" );

    } elseif (isset($_POST['bouton3'])) {  

        echo '1 vas etre Arreter';

      system("bash /etc/init.d/serveur1.sh stop" );

   } elseif (isset($_POST['bouton4'])) {  

        echo '1 vas etre Mis à jours';

      system("bash /etc/init.d/serveur1.sh update" );    

   } else {  

        echo '1 vas etre Démarrer'; 

      system("bash /etc/init.d/serveur1.sh start" );

    }  

 } 

?><form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">

 <label></label>

 <p align="center"><strong>Administration des Serveurs </strong></p>

  <p>

    <input type="SUBMIT" name="bouton2" value="Rebooter">

    <input type="SUBMIT" name="bouton3" value="Arreter">

    <input type="SUBMIT" name="bouton4" value="Mise à jour">

    

    

    

    <em><strong>Le Serveur  est</strong></em> 

    <?php

$port = *****; 

$ip = "***.***.***.***"; 

$sock = @fsockopen($ip, $port, $num, $error, 5);

if (!$sock)

    echo '<font color="#CC0000"><img src="http://*****/offline.png" alt="offline" width="32" height="32"></font>';

else{

    echo '<font color="#00CC00"><img src="http://*****/online.png" alt="online" width="32" height="32"></font>';

    fclose($sock);

}

?>

  </p>

  <p>&nbsp;</p>

  </form>  

```

Donc pour lancer mon serveur si je rajoute  un script intermediare du style 

```

PID=$$ 

(sleep 10800 && kill -15 ${PID})& 

/etc/init.d/mon script de lancement.sh start

```

et à la fin de mon script de lancement je rajoute ceci :

```

-15 ${PID}

```

ais je bien tous compris, comme je vous es dit je suis nouvele untilisateur linux donc pardonner ses question surement tres clasique pour vous.

Et merci encore pour votre aide preciseuse .

----------

## claudecs

Merci magic banana toi tu me onseillerai donc de faire se script 

```

#!/bin/bash 

$1="su ***** -c '/etc/init.d/mon script de lancement.sh start"

$2="10800"

if [ -z "$2" ] 

then 

    echo "Usage: wak command timeout" 

    exit 64 

fi 

($1 

# Just to let the time to the sleep $2 to initiate in case of an almost instantenous execution of $1 

sleep 1 

killall sleep)& 

sleep $2 && pkill -f "$1" && exit 1 

exit 0

```

que je collerai dans mon /usr/bin et qui se lance tous seul ?

par avance merci

----------

## Magic Banana

Ton script est en Shell POSIX (/bin/sh). Ce que te propose Bapt nécessite zsh. Donc à moins d'installer zsh et de changer le "#!", ça ne va pas. Ce que je te propose a été testé avec Bash qui est très certainement le Shell qui interprète ton script (Bash étant une dépendance indispensable à Gentoo). Tu peux donc utiliser le morceau de code que je t'ai filé :

Si tu veux l'intégrer "en dur", cela donne :

```
(/etc/init.d/mon script de lancement.sh start

sleep 1

killall sleep)&

sleep 3h && pkill -f "/etc/init.d/mon script de lancement.sh start"
```

Mais tu peux aussi suivre les instructions de mon précédent message (copie tel quel le code que je t'ai donné) et simplement ajouter en fin de ton script :

```
wak "/etc/init.d/mon script de lancement.sh start" 3h
```

----------

## claudecs

Je viens de lui coller ca dans mon script, tous demarre mais rien ne s'arrete au bout de 60 seconde .

une idée ? qu'es je mal ecris ?

```

srcds_start() {

    echo "---------------------------------------------------------------------"

    echo "Lancement du serveur : Debut de la sequence"

    echo "---------------------------------------------------------------------"

    

PID=$$ 

(sleep 60 && kill -15 ${PID})&

#OWD=`pwd`

    cd ${SRCDS_PATH}

    #su ${SRCDS_USER} -c "screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}"

screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}

    #cd $OWD

    echo "---------------------------------------------------------------------"

    echo "Lancement du serveur : Fin de la sequence"

    echo "---------------------------------------------------------------------"

```

----------

## claudecs

Magic banana en dure cela veut dire dans ma page php ?

comme ceci ?

```

        echo '4 vas etre Rebotter';

      system("bash (/etc/init.d/serveur4.sh start 

sleep 1 

killall sleep)& 

sleep 60s && pkill -f "/etc/init.d/serveur4.sh start"" );
```

car ca me plantre ma page php plutot qu'autre chose ?

Que veut dire en dure

----------

## claudecs

magique je viens de creer ce script sous usr/bin je l'ai nomé timer.sh je l'ai chmoder  :Wink: 

```

#!/bin/bash 

if [ -z "$2" ] 

then 

    echo "Usage: wak command timeout" 

    exit 64 

fi 

($1 

# Just to let the time to the sleep $2 to initiate in case of an almost instantenous execution of $1 

sleep 1 

killall sleep)& 

sleep $2 && pkill -f "$1" && exit 1 

exit 0 

wak "/etc/init.d/serveur4.sh start" 60s

```

malheureusement au bout de mes 60 secondes il tourne toujours ...

merci pour vos aide à un pauvre noob que je je suis ! (faut t'il rebooter mon serveur pour prendre en compte se nouveau script ?)

----------

## geekounet

 *claudecs wrote:*   

> Geekounet je viens de lire le topics desolé je vais essaye de préciser un peu plus .

 

Oui mais il faut quand même que tu modifies le titre (en éditant ton premier post)  :Wink: 

----------

## Magic Banana

Le 'wak "COMMANDE" 60s' doit être placé à l'intérieur de srcds_start (et /usr/bin/wak ne doit pas contenir de ligne 'wak "/etc/init.d/serveur4.sh start" 60s'). Le problème est que je te comprends pas trop. Quelle est la COMMANDE, lancée dans srcds_start, qui doit être stoppée au bout de 60s ?

----------

## Bapt

Ce que j'ai proposé ne nécessite pas zsh du tout c'est tu posix normal.

J'ai parlé de zsh pour parler du module datetime pour le temps, mais j'ai proposé une solution posix qui fonctionnera avec n'importe quel shell.

----------

## Magic Banana

 *Bapt wrote:*   

> Ce que j'ai proposé ne nécessite pas zsh du tout c'est tu posix normal.
> 
> J'ai parlé de zsh pour parler du module datetime pour le temps, mais j'ai proposé une solution posix qui fonctionnera avec n'importe quel shell.

 

Merci alors de m'avoir fait découvrir "$$". Je ne connaissais pas et pensais que c'était un ajout de zsh.  :Very Happy: 

----------

## claudecs

La commande que je veut stopper au bou d'un certain temps c'est celle ci

 *Quote:*   

> 
> 
>     #su ${SRCDS_USER} -c "screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}" 
> 
> screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS} 
> ...

 

En gros le lancement de mon serveur css commander au dessus doit se stopper toute seule dans 3 heures .

donc j'ai enregistrer ton script comme il est c'est a dire :

```

#!/bin/bash 

if [ -z "$2" ] 

then 

    echo "Usage: wak command timeout" 

    exit 64 

fi 

($1 

# Just to let the time to the sleep $2 to initiate in case of an almost instantenous execution of $1 

sleep 1 

killall sleep)& 

sleep $2 && pkill -f "$1" && exit 1 

exit 0 

```

Sous le nom de timer.sh

Et si je comprend bien il faut que je lance mon script avec la commande wak . Mon script *.start est lancé par un epage php donc je la modifi en rajoutant ta commande .

```

echo '4 vas etre Démarrer';

      system("bash wak "/etc/init.d/serveur4.sh start" 60s" );

```

je test ca tout de suite merci encore

----------

## claudecs

Bon he bien toujours rien ma facon de l'ecrire doit planter ma page php .

Je l'ai lancer par putty en direct mais voila ce que cela me marque .

```

ns****** ~ # wak "/etc/init.d/serveur4.sh start" 60s

-bash: wak: command not found

```

Désoleé je doit etre lourding mais j'ai du loupé quelque chose/

 :Crying or Very sad: 

merci

----------

## Magic Banana

Commençons par quelque chose de simple : lorsque tu entres une commande, l'interpréteur (le Shell, Bash dans ton cas) cherche dans les répertoires de ta variable PATH (notamment /usr/bin) un fichier exécutable ayant le nom de la commande. Ainsi, si tu as appelé le fichier "timer.sh", il faut l'exécuter avec ce nom et non pas avec "wak" (qui était simplement le nom de fichier que j'avais personellement choisi).

Ensuite, si j'ai tout bien compris, ton PHP lance un script d'initialisation qui, lui même, exécute une commande qui doit être stoppée au bout de 3h (à moins qu'elle ne se termine avant). C'est donc dans le script d'initialisation (plus précisément dans la fonction srcds_start) que tu dois utiliser timer.sh :

```
srcds_start() {

    echo "---------------------------------------------------------------------"

    echo "Lancement du serveur : Debut de la sequence"

    echo "---------------------------------------------------------------------"

    OWD=`pwd` 

    cd ${SRCDS_PATH}

    timer.sh "su ${SRCDS_USER} -c screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}

    screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}" 3h

    cd $OWD

    echo "---------------------------------------------------------------------"

    echo "Lancement du serveur : Fin de la sequence"

    echo "---------------------------------------------------------------------" 
```

Le code PHP initial devait rester inchangé.

Ceci dit, je ne saisis pas les subtlité de ce que tu fais (et n'ai jamais vraiment cherché à comprendre ce que fait la commande screen  :Embarassed:  ).

----------

## NEOxAKIRA

<HS>

Iop claudecs, je mettais poser la question de savoir si un serveur dédié n'étais pas mieux qu'un serveur verygames ou autre pour counter striker, Day of defeat et autre, donc pourrait tu préciser quelle offre tu as chez ovh et  si ton serveur Counter-Strike Source tourne bien ? (combien de slot, combien de ticks)

Et il y a que ton serveur steam qui tourne ou aussi un apache par exemple pour heberger un site web en rapport avec le serveur...

</HS>

Merci

----------

## claudecs

Merci magic banana pour ton aide j'essaye ca ce soir .

Ps j'avais essayer de lancer par timer.sh lol je me suis douté que wak etait perso a toi mais n'en etant pas sur je te remerci de me l'avoir precisé . en effet ce monde de linux en prog pur etan pour moi nouveau .

NEOxAKIRA, je m'occupe de serveur depuis maintenant plus de cinq ans je suis passé pas un qui as eté racheter par verygames par nitroserv et par verygame.

je suis chez ovh depuis maitenant 3 ans avec 3 differents serveur installé en gentoo ovh release .

Sache tous d'abord que les grosse team passe tous par ovh que verygame à aussi ses serveurs chez verygames .

Ensuiste pour faire se que j'ai actuell0ment pour moin de 800 euros me couterais 2800 chez ovh ;

Mais j'attire ton attention sur les plus que fournis ovh quand tu ne connais pas le monde du serveur de jeu ainsi que la complexité à tous installé (ftp mirroir pour les map) les dll auto les modes d'introduction de jeu ainsi que la prog en linux .

voila si tu as d'utres question c'est avec plaisir que j'y repondrais .

ps mon offre sur ovh actuel je suis en superplan .

----------

## NEOxAKIRA

c'etait juste comme ça, car souvant en jouant je voit des gars qui galere a configurer leur serveur car ils connaissant pas grand chose en info, et je me suis dit que quand tu connais, surtout que c'est pas très dur a mettre en place un serveur de jeux, tu devais pouvoir obtenir de meilleur performance sur un serveur dédié et en plus heberger d'autre service que par un tiers fournissant que des serveur de jeux dont tu pas modifié autre chose que le serveur...

c'est étonnant car il doit pas falloir un très gros ordi pour faire tourner un serveur de counter strike, et ovh fourni une connexion de 100Mbit/s, je me disais meme qu'il doit être possible de faire tourner plusieurs serveurs de jeux sur un meme dédié sans dépenser plus d e100€ par mois et y ajouter apache et une bdd.

----------

## claudecs

NEOxAKIRA

En effet c'est assez simple quand tu prend le temps de comprendre .

Pour mon cas donc beaucoup moins que 100 euros par moi j'ai installé dessus :

1 serveur 32 slots tick 100 fun

1 serveur 32 slots tick 100 gungame

1 serveur 32 slots tick 66 zombie

1 serveur 12 slots war

1 psychostats

1 teamspeak

1 serveur miroir pour mes fichiers à dll de plus de 500 maps

donc de quoi faire pas mal de frag non ! aucun lag constater pourtant les serveur son souvent frequenté .

Cherche Nltfrance sur google ca te donneras une petite idée .

ps pour 100 euros par moi tu passe sur du 1 gb de transfert illimité !

----------

## claudecs

magic babana mon script original est :

```

srcds_start() {

    echo "---------------------------------------------------------------------"

    echo "Lancement du serveur : Debut de la sequence"

    echo "---------------------------------------------------------------------"

#OWD=`pwd`

    cd ${SRCDS_PATH}

    su ${SRCDS_USER} -c "screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}"

screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}

    #cd $OWD

    echo "---------------------------------------------------------------------"

    echo "Lancement du serveur : Fin de la sequence"

    echo "---------------------------------------------------------------------"

```

j'ai fait ca

```

    timer.sh "#su ${SRCDS_USER} -c "screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}"

screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}" 60s

 
```

ou ceci 

```

     #timer.sh "su ${SRCDS_USER} -c "screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}"

screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}" 60s

```

et ceci

```

  timer.sh "su ${SRCDS_USER} -c "screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}"

screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}" 60s

 
```

rien de rien il ne demarre pas ...

j'ai meme essayer en direct et voici la reponce

```

ns***** ~ # timer.sh "/etc/init.d/serveur4.sh start" 60s

: Aucun fichier ou répertoire de ce type

ns***** ~ #

```

petite info j'ai lancé mon fichier timer.sh en modifiant #!/bin/bash par  #!/bin/sh pour qu'il soit reconnu et le nom en testwak .

ca m'as donné ceci

```

ns****** ~ # testwak "serveur4.sh start" 10s

: command not foundine 2:

---------------------------------------------------------------------

Lancement du serveur : Debut de la sequence

---------------------------------------------------------------------

---------------------------------------------------------------------

Lancement du serveur : Fin de la sequence

---------------------------------------------------------------------

/usr/bin/testwak: line 12: 16213 Complété                sleep $2

```

ca l'as démarrer mais pas stopper au bout de 10 secondeLast edited by claudecs on Wed Jul 23, 2008 10:55 pm; edited 1 time in total

----------

## claudecs

ps une petite question mon fichier apres un chmod +x /usr/bin/testwak marche impec

par contre quand je le modifi et que je veut le relancer il me met 

```

-bash: /usr/bin/testwak: /bin/sh^M: bad interpreter: Aucun fichier ou répertoire de ce type

```

meme si je lui recolle un nouveau chmod +x /usr/bin/testwak 

que doit je faire pour le redeclarer dans se ca svp ?

merci

----------

## Magic Banana

Je ne sais pas avec quel éditeur de texte tu as copié le code mais il t'a collé des '^M' à la fin des lignes visiblement. Enlève ces '^M' (ou refais le copier-coller du script) avec un vrai éditeur de texte (e.g., emacs  :Wink:  ).

Le '#' commence un commentaire en Shell. Il ne faut donc pas le mettre !

Tu as des soucis avec des guillemets sensés entourer d'autres guillemets. Naturellement le premier guillemet "interne" ferme le premier guillemet externe et ça ne peut pas aller. Tu pourrais donc faire de ta commande à temporiser un nouveau script (dans un fihier à part que tu n'oubli pas de rendre exécutable) que tu appelleras (par son nom de fichiers) en premier argument de timer.sh (le second étant, comme tu l'as déjà compris, "3h"). C'est le premier truc qui me vient et il y a sûrement plus élégant comme méthode (et moin compliqué car ce script devra prendre en argument toutes les varibles qu'il utilise). Les autres ?

Pour tester timer.sh facilement, essaie donc cela :

```
$ timer "sleep 10s" 1s
```

Si ça s'arrête au bout d'une seconde c'est que c'est bon.  :Wink: 

----------

## claudecs

oui en effet je passe par l'editeur de webmin .

il faut que je le supprime et le refaire et tous marche .

Mais bon toujours le mm probleme :

```

ns***** mes_scripts # wak

: command not found2:

Usage: wak command timeout

```

le code wak marche bien 

mais des que je lui met une commande :

```

ns***** mes_scripts # wak ./testserv 60

: command not found2:

/usr/bin/wak: line 12: 23627 Complété                sleep $2

```

mon serveur de jeu demarre bien mais ne s'arrete pas !

 snif

----------

## claudecs

bapt - je viens de test ta solution dans mon script que voici :

```

PID=$$ 

(sleep 60 && kill -15 ${PID})& 

cd /home/ovh/www/serveurcss/serveur5/steam

screen -dmS serveur5 ./srcds_run -console -port 27055 -game cstrike +map de_dust2 +maxplayers 20 -tickrate 100 -autoupdate

```

je le lance ./monscript, mon serveur demarre bien mais il me kill le mauvais processus !

```

root     21492  0.0  0.0   8156  2480 ?        Ss   00:24   0:00 sshd: root@pts/3

root     21499  0.0  0.0   3196  1800 pts/3    Ss   00:24   0:00 -bash

root     24315  0.0  0.0   3196   608 pts/3    S    00:53   0:00 -bash

root     24316  0.0  0.0   1740   528 pts/3    S    00:53   0:00 sleep 60

root     24318  0.0  0.0   2924   940 ?        Ss   00:53   0:00 SCREEN -dmS serveur5 ./srcds_run -console -port 27055 -game cstrike +map de_dust2 +maxplayers 20 -tickrate 100 -a

root     24319  0.0  0.0   2708  1344 pts/6    Ss+  00:53   0:00 /bin/sh ./srcds_run -console -port 27055 -game cstrike +map de_dust2 +maxplayers 20 -tickrate 100 -autoupdate

root     24330  3.9  2.1 163020 86904 pts/6    S+   00:53   0:01 ./srcds_i686 -console -port 27055 -game cstrike +map de_dust2 +maxplayers 20 -tickrate 100 -autoupdate

root     24331  0.0  2.1 163020 86904 pts/6    S+   00:53   0:00 ./srcds_i686 -console -port 27055 -game cstrike +map de_dust2 +maxplayers 20 -tickrate 100 -autoupdate

root     24332  0.0  2.1 163020 86904 pts/6    S+   00:53   0:00 ./srcds_i686 -console -port 27055 -game cstrike +map de_dust2 +maxplayers 20 -tickrate 100 -autoupdate

root     24334  2.5  2.1 163020 86904 pts/6    S+   00:53   0:01 ./srcds_i686 -console -port 27055 -game cstrike +map de_dust2 +maxplayers 20 -tickrate 100 -autoupdate

root     24401  0.0  0.0      0     0 ?        Z    00:53   0:00 [watchdog] <defunct>

root     24403  0.0  0.0   2308   872 pts/3    R+   00:53   0:00 ps aux

ns****** mes_scripts # ./testserv: line 2: kill: (24314) - Aucun processus de ce type

```

comment peut il killer le bon prcessus ?

----------

## claudecs

lol apres plusieurs test et complexité laborieuse il suffit tous simplement de rajouté cette ligne pour stopper mon script ...

```

srcds_start() {

    echo "---------------------------------------------------------------------"

    echo "Lancement du serveur : Debut de la sequence"

    echo "---------------------------------------------------------------------"

#OWD=`pwd`

    cd ${SRCDS_PATH}

     #su ${SRCDS_USER} -c "screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}"

screen -AmdS ${SRCDS_NAME} ${SRCDS_BIN} ${SRCDS_OPTS}

    #cd $OWD

    echo "---------------------------------------------------------------------"

    echo "Lancement du serveur : Fin de la sequence"

    echo "---------------------------------------------------------------------"

sleep 10 && srcds_stop

    echo "---------------------------------------------------------------------"

    echo "serveur arreter au bout de 10 secondes"

    echo "---------------------------------------------------------------------"

 

```

le sleep suivi tous simplement de la commande d'arret .. 

mais je suis pret à essayer vos solutions si elle sont differente .

merci à tous pour votre aide

----------

## Magic Banana

Ta solution est meilleure ! Nos solution se contentaient de tuer un processus (comme tu ne nous avais pas préciser au départ qu'il s'agissait de stopper un script d'initialisation...). Toi, tu appelles srcds_stop. C'est mieux !

----------

