OVH Cloud OVH Cloud

Comment savoir si une application est lancée ?

10 réponses
Avatar
Olivier
Bonsoir,

Je suis novice en linux, et je voudrai savoir s'il existe un moyen par
script de lancer une application X si elle n'est déjà pas lancée ?

Quelqu'un aurait-il un exemple à me donner ?

Un grand merci par avance

Olivier

10 réponses

Avatar
nico
Salut,


Je suis novice en linux, et je voudrai savoir s'il existe un moyen par
script de lancer une application X si elle n'est déjà pas lancée ?
ps aux | grep <nom appli>


ensuite verifie la valeur de $? pour voir si grep a trouver qqch on non :

#! /bin/bash


if ps aux | grep mozilla 1> /dev/null 2>&1;
then
echo "deja lancé"
else
echo "pas lancé"
mozilla
fi

mais y a un bug a cause du grep deja lancé :/

--
nico

Avatar
Rakotomandimby (R12y) Mihamina
Olivier :

Quelqu'un aurait-il un exemple à me donner ?


oui, les script init. Mais il y en a surement d'autres, d'exemples.

/etc/init.d/xxx pour les fedora, gentoo et debian. Je ne sais pas pour les
autres.

Je me suis longtemps demandé comment et pourquoi ça marche, ces script:

En gros, tu démarre le démon (par le script), et il te stocke le PID
dans un fichier bien précis.

Pour savoir si le demon est lancé ou pas, un controle de ce fichier
suffit.

Ce que je n'ai pas trouvé c'est comment un process qui se lance
récupère son PID. Peut-etre, je dis bien peut-etre, qu'il le stocke dans
une variable d'environnement, ou alors c'est sur une sortie specifique que
ça sort, ou je ne sais pas... Bref, un bon exemple, d'après moi, sont
les script init.


PS: je le sais parcequ'un jour, j'ai lancé apache par les script init, et
je l'ai relancé. Et il s'est trouvé que le script à vu qu'apache était
"already running" et à refusé le deuxième lancement. Je ne me rappelle
plus sur quelle distribution ça me faisait ça....


--
Miroir de logiciels libres http://www.etud-orleans.fr
Développement de logiciels libres http://aspo.rktmb.org/activites/developpement
Infogerance de serveur dédié http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)

Avatar
Basile Starynkevitch [news]
On 2005-06-13, Olivier wrote:
Bonsoir,

Je suis novice en linux, et je voudrai savoir s'il existe un moyen par
script de lancer une application X si elle n'est déjà pas lancée ?


dans un shellscript, on peut aussi utiliser pidof

Quelqu'un aurait-il un exemple à me donner ?


## pas testé mais ça devrait marcher!

emacspid=$(pidof emacs)
if [ -z "$emacspid" ]; then
emacs &
fi


--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile(at)starynkevitch(dot)net
8, rue de la Faïencerie, 92340 Bourg La Reine, France

Avatar
Olivier

oui, les script init. Mais il y en a surement d'autres, d'exemples.

/etc/init.d/xxx pour les fedora, gentoo et debian. Je ne sais pas pour les
autres.

Je me suis longtemps demandé comment et pourquoi ça marche, ces script:

En gros, tu démarre le démon (par le script), et il te stocke le PID
dans un fichier bien précis.

Pour savoir si le demon est lancé ou pas, un controle de ce fichier
suffit.

Ce que je n'ai pas trouvé c'est comment un process qui se lance
récupère son PID. Peut-etre, je dis bien peut-etre, qu'il le stocke dans
une variable d'environnement, ou alors c'est sur une sortie specifique que
ça sort, ou je ne sais pas... Bref, un bon exemple, d'après moi, sont
les script init.


PS: je le sais parcequ'un jour, j'ai lancé apache par les script init, et
je l'ai relancé. Et il s'est trouvé que le script à vu qu'apache était
"already running" et à refusé le deuxième lancement. Je ne me rappelle
plus sur quelle distribution ça me faisait ça....




Salut,

Ok euh je suis vraiement un grand débutant ... j'ai installé la mandriva
LE ce week-end ...

En fait je voudrai relancer automatiquement x0rfbserver le serveur vnc,
car il plante régulièrement ... j'ai fait ceci (avec un exemple pris sur
le web) :


ps aux | grep -v grep | grep x0rfbserver >/dev/null 2>&1
if [ $? -ne 0 ] ; then
# restart program
echo "Redémarrer x0rfbserver"
export "DISPLAY=:0.0"
/usr/bin/x0rfbserver
else
echo "x0rfbserver est déjà lancé !"
fi

mas je suis imcapable de comprendre pourquoi il passe directement à la
ligne :
echo "x0rfbserver est déjà lancé !"

alors que x0rfbserver n'est pas lancé.

tu peux m'expliquer le fonctionnement ?

Olivier

Avatar
Ronald
Le Mon, 13 Jun 2005 21:49:30 +0200, Rakotomandimby (R12y) Mihamina a
écrit :

Olivier :

Quelqu'un aurait-il un exemple à me donner ?


oui, les script init. Mais il y en a surement d'autres, d'exemples.

/etc/init.d/xxx pour les fedora, gentoo et debian. Je ne sais pas pour les
autres.

Je me suis longtemps demandé comment et pourquoi ça marche, ces script:

En gros, tu démarre le démon (par le script), et il te stocke le PID
dans un fichier bien précis.

Pour savoir si le demon est lancé ou pas, un controle de ce fichier
suffit.

Ce que je n'ai pas trouvé c'est comment un process qui se lance
récupère son PID. Peut-etre, je dis bien peut-etre, qu'il le stocke dans
une variable d'environnement, ou alors c'est sur une sortie specifique que
ça sort, ou je ne sais pas... Bref, un bon exemple, d'après moi, sont
les script init.


en vrac parce que je n'ai pas tout compris:

$ man getpid

$ cat /var/run/entranced.pid
4000
$ pgrep entranced
4000

le deux derniers pour montrer que ça correspond bien.

PS: je le sais parcequ'un jour, j'ai lancé apache par les script init, et
je l'ai relancé. Et il s'est trouvé que le script à vu qu'apache était
"already running" et à refusé le deuxième lancement. Je ne me rappelle
plus sur quelle distribution ça me faisait ça....



Avatar
TiChou
Dans le message <news:42ade060$0$31716$,
*Olivier* tapota sur f.c.o.l.configuration :

Bonsoir,


Bonsoir,

Je suis novice en linux, et je voudrai savoir s'il existe un moyen par
script de lancer une application X si elle n'est déjà pas lancée ?


Il faut d'abord vérifier si l'application en question est lancée ou non.
Plusieurs moyens de le faire. Par exemple en testant le statut de sortie
d'une des commandes suivantes :

$ pidof application

$ killall -CHLD application

$ ps h -o pid -C application

La variable $? vaudra 0 si l'application tourne ou 1 si elle ne tourne pas.

Certaines applications, quand elles sont lancées, créent un fichier,
générallement dans le répertoire /var/run, application.pid qui contienr le
PID de l'application. Il suffit alors de récupérer le PID dans ce fichier et
de tester si le process correspondant à ce PID tourne :

$ kill -CHLD $(< /var/run/application.pid)

et on effectue un test sur la variable $?

Quelqu'un aurait-il un exemple à me donner ?


#!/bin/sh

killall -CHLD application

if [[ $? -eq 0 ]]
then
printf "Lancement de l'applicationn"
application
else
printf "L'application est déjà lancéen"
fi

Un grand merci par avance


Pas de quoi mais il serait bon d'acquérir malgré tout quelques bases en
scripting shell : http://lea-linux.org/dev/shell_script.html

--
TiChou

Avatar
TiChou
(supersedes <news:)

Dans le message <news:42ade060$0$31716$,
*Olivier* tapota sur f.c.o.l.configuration :

Bonsoir,


Bonsoir,

Je suis novice en linux, et je voudrai savoir s'il existe un moyen par
script de lancer une application X si elle n'est déjà pas lancée ?


Il faut d'abord vérifier si l'application en question est lancée ou non.
Plusieurs moyens de le faire. Par exemple en testant le statut de sortie
d'une des commandes suivantes :

$ pidof application

$ killall -CHLD application

$ ps h -o pid -C application

La variable $? vaudra 0 si l'application tourne ou 1 si elle ne tourne pas.

Certaines applications, quand elles sont lancées, créent un fichier,
générallement dans le répertoire /var/run, application.pid qui contienr le
PID de l'application. Il suffit alors de récupérer le PID dans ce fichier et
de tester si le process correspondant à ce PID tourne :

$ kill -CHLD $(< /var/run/application.pid)

et on effectue un test sur la variable $?

Quelqu'un aurait-il un exemple à me donner ?


#!/bin/sh

killall -CHLD application

if [[ $? -ne 0 ]]
then
printf "Lancement de l'applicationn"
application
else
printf "L'application est déjà lancéen"
fi

Un grand merci par avance


Pas de quoi mais il serait bon d'acquérir malgré tout quelques bases en
scripting shell : http://lea-linux.org/dev/shell_script.html

--
TiChou

Avatar
TiChou
Dans le message <news:,
*TiChou* tapota sur f.c.o.l.configuration :

Je suis fatigué ce soir...

#!/bin/sh

killall -CHLD application


killall -CHLD application >/dev/null 2>&1

--
TiChou

Avatar
TiChou
Dans le message <news:,
*Basile Starynkevitch [news]* tapota sur f.c.o.l.configuration :

emacspid=$(pidof emacs)
if [ -z "$emacspid" ]; then
emacs &
fi


Il vaut mieux tester directement le statut de sortie de la commande pidof,
ça permet d'éviter en plus de passer par une variable intermédiaire.

--
TiChou

Avatar
Nicolas George
"TiChou" wrote in message :
killall -CHLD application
killall -CHLD application >/dev/null 2>&1



killall -0 /chemin/vers/bin/aire >/dev/null 2>&1