#1 Le 30/08/2008, à 22:22
- alexis57
Détécter si un programme est lancé ?
Bonjour,
Je voudrais détecter si un programme est lancé ( avec screen -dmS )
A l'aide de ps aux et de grep.
ps aux | grep "screen -dmS commande" | et la je sais pas comment faire la condition ...
Par exemple : Si il y a bien une ligne avec "screen -dmS commande", il ne fait rien.
Si il ne trouve rien alors il lance la commande : "screen -dmS commande ./commande.sh"
Je ne sais pas faire de condition et comment analyser un résultat.
Le tout lancé en tache cron toute les 10min et voila.
Je vous remercie.
Hors ligne
#2 Le 30/08/2008, à 22:39
- schaars
Re : Détécter si un programme est lancé ?
Bonsoir
Il suffit de lancer la commande ps aux | grep "screen -dmS commande" et de tester la valeur de retour de grep :
ps aux | grep "screen -dmS commande" &> /dev/null # pour éviter d'aficher la sortie standard et la sortie d'erreurs
if [ $? == 1 ]
then
# il n'y a pas de telle ligne dans ps aux
screen -dmS commande ./commande.sh
#else
# ne rien faire
fi
Pour le lancer avec cron je plaçerais ces lignes dans un exécutable et ce sera cet exécutable que cron appelera.
Dernière modification par schaars (Le 30/08/2008, à 22:42)
Le linux des uns est l'OS/2 des autres (Thom E. Gemcity)
Hors ligne
#3 Le 30/08/2008, à 23:02
- alexis57
Re : Détécter si un programme est lancé ?
Merci, encore une question :
# pour éviter d'aficher la sortie standard et la sortie d'erreurs
C'est pour enlever l'affichage du grep.
Car quand je fais grep screen -dmS commande, j'aperçois aussi : " grep screen -dmS commande ".
Pour le Cron c'est bon je sais faire.
Et donc pour killer un screen:
ps aux | grep "screen -dmS commande" &> /dev/null # pour éviter d'aficher la sortie standard et la sortie d'erreurs
if [ $? == 1 ]
then
# ne rien faire
else
# killer le processus
pkill -f commande.sh
fi
Dernière modification par alexis57 (Le 30/08/2008, à 23:04)
Hors ligne
#4 Le 30/08/2008, à 23:26
- schaars
Re : Détécter si un programme est lancé ?
Merci, encore une question :
# pour éviter d'aficher la sortie standard et la sortie d'erreurs
C'est pour enlever l'affichage du grep.
Non tout ce qui commence par # est un commentaire en bash. C'est la redirection qui enlève l'affichage des sorties d'erreur et standard : &> /dev/null
Avec cette ligne je dis d'envoyer les deux sorties sur le périphérique /dev/null, qui est une sorte de "poubelle" qui prend tout sans broncher (j'arrive pas à trouver comment définir /dev/null )
Plus d'infos sur les redirections ici : http://linuxfr.org/forums/47/24655.html
Pour le reste je te fait confiance, surtout que je ne connais pas beacoup screen
Dernière modification par schaars (Le 30/08/2008, à 23:28)
Le linux des uns est l'OS/2 des autres (Thom E. Gemcity)
Hors ligne
#5 Le 30/08/2008, à 23:34
- alexis57
Re : Détécter si un programme est lancé ?
Oui lol je savais que # c'etait pour les commentaires.
Bin j'utilise screen sur un serveur dédié ... /dev/null est comme un trou noir, ça ne laisse rien passer. Tout ce qui passe dedans ça tombe aux oubliettes. ( merci wikipédia et merci schaars )
Et comme j'ai dis, en faisant grep screen... J'aurai 2 résultats :
- grep screen
- ma ligne screen : screen -dmS commande ./commande.sh
Meme si il ne trouve pas de screen, il m'affiche quand meme grep screen donc il ne lancera pas le programme ou ne killera pas mon programme ( dans le 2eme exemple. )
Je me trompe ?
PS :Je vais lire ce que tu m'as donné et je vais dormir.
En tout cas je te remercie, ça me fait une bonne base.
Dernière modification par alexis57 (Le 30/08/2008, à 23:35)
Hors ligne
#6 Le 31/08/2008, à 00:56
- schaars
Re : Détécter si un programme est lancé ?
Ok cette fois j'ai bien compris : tu peux faire
if [ `ps aux | grep "screen -dmS commande" | wc -l` == 1 ]
then
# un seul screen donc c'est grep screen
else
# plusieurs screen donc il y a screen -dmS commande
fi
/dev/null comme un trou noir me plait bien comme image
Le linux des uns est l'OS/2 des autres (Thom E. Gemcity)
Hors ligne
#7 Le 31/08/2008, à 01:16
- toufalk
Re : Détécter si un programme est lancé ?
on peux aussi faire ça:
if ps aux | grep screen | grep -q commande
then
# le 'screen commande' est bien là
fi
Tu sélectionne les screen, puis, dans cette sélection, ta commande (le -q est equivalent à >/dev/null)
Hors ligne
#8 Le 31/08/2008, à 09:39
- alexis57
Re : Détécter si un programme est lancé ?
Je vous remercie, je test ça tout de suite
Hors ligne
#9 Le 31/08/2008, à 11:29
- alexis57
Re : Détécter si un programme est lancé ?
C'est bon ça marche dans cette configuration :
if [ `ps aux | grep tsserver | wc -l` == 0 ]
then
sh /etc/init.d/ts.sh &> /dev/null
else
echo "ts est lance"
fi
Dernière modification par alexis57 (Le 31/08/2008, à 11:33)
Hors ligne
#10 Le 04/10/2008, à 12:57
- Oncle-BOB
Re : Détécter si un programme est lancé ?
Bonjour, je me permet de continuer ce post car j'ai aussi besoin de détecter si un screen est bien lancé, malheureusement je suis débutant, cela fait 3 jours que j'ai ubuntu version serveur, j'ai donc lu les commande fondamentale, écrire un script shell mais je bloque a mon script car rien ne ce passe.
Voici ce que je désire réaliser sur base de vos exemples ci-dessu, un script shell qui vérifie tous les 2 minutes si un screen nommé "serveurjeux" est bien lancé dans la liste des screen via la commande screen -ls si il y est il ne fait rien or si il n'y est pas alors il lance une commmande screen avec tous les paramètres du screen "serveurjeux"
Voici le code que j'ai commencer mais que rien ne ce passe, pourquoi ?
#!/bin/bash
echo Controle du serveur !
if screen -ls | grep "serveurjeux" [ $? == 1 ] ; then
# Il ne voie pas ce screen dans screen -ls alors il le lance
cd /home/serveur/
screen -A -m -d -S serveurjeux ./srcds_run -console -game cstrike +map de_dust2 -maxplayers 10 -tickrate 100 -port 27014
fi
Hors ligne
#11 Le 04/10/2008, à 14:25
- schaars
Re : Détécter si un programme est lancé ?
Bonjour
Ton if n'est pas bon. Il faut écrire :
if [ `screen -ls | grep "serveurjeux"` == 1 ] ; then
blablabla...
fi
Le linux des uns est l'OS/2 des autres (Thom E. Gemcity)
Hors ligne
#12 Le 04/10/2008, à 15:53
- Oncle-BOB
Re : Détécter si un programme est lancé ?
Ha ca y est presque mais il ne ce lance pas jusqu'au bout il me met
Controle des serveurs !
: command not found
go.sh: line 10: syntax error near unexpected token `fi'
go.sh: line 10: `fi '
Dernière modification par Oncle-BOB (Le 04/10/2008, à 15:54)
Hors ligne
#13 Le 07/10/2008, à 15:07
- Oncle-BOB
Re : Détécter si un programme est lancé ?
Esse qu'un modo pourrais déplacé ce sujet dans la section serveur ? merci
Hors ligne