Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/06/2011, 08h41   #1
Invité de passage
 
Inscription : juillet 2009
Messages : 6
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 6
Points : 4
Points : 4
Par défaut Script + Cron - Comment eviter les lancements multiples

Bonjour,

Je lance des taches de fond via CRON mais certaines d'entre elles prennent du temps à s"executer et il est possible que le CRON relance la même tache alors que la première instance n'est pas encore finie ce que je souhaiterais éviter.

Je souhaiterais donc que le script teste si il y a déjà une instance du même script lancée avant de faire les traitements.

J'avais pensé un truc du genre :

Code :
1
2
3
4
5
 
if [ "$(ps -ef|grep nom_du_script|grep -v grep)" != "" ];then
echo "Une intance de nom_du_script est dejà en cours ..."
exit
fi

Mais bien évidemment ça, ne marche pas car le script est lancé au moment ou je fais le test.

Connaissez vous un moyen de faire cela proprement ?

Merci de votre aide.

Jean
jean-A est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/06/2011, 09h03   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
la solution est en fait simple, mais il faut le savoir,

il suffit que le script crée au début un marqueur, /var/run/$0.pid
et qu'il le detruise en fin d'exécution.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh
if [ -f /var/run/$0.pid ] ; then
   echo "Une autre occurence tourne" >> /var/log/$0.log
   exit 1
fi
touch /var/run/$0.pid
if [ $? -ne 0 ] ; then
   echo "impossible de cree le fichier /var/run/$0.pid" >> /var/log/$0.log
   exit 2
fi
 
#[...] ton code
 
 
#fin de script :
rm -f /var/run.$0.pid
exit 0
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 10h09   #3
Invité de passage
 
Inscription : juillet 2009
Messages : 6
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 6
Points : 4
Points : 4
Bien sûr !! C'est tellement simple quand on y pense.

Merci beaucoup pour le coup de main.

Jean
jean-A est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/06/2011, 12h29   #4
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 464
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 464
Points : 9 585
Points : 9 585
Bonjour,

Le probleme du fichier temporaire, c'est que si le script plante, il ne sera plus jamais relance.

La seule solution permettant de relancer le script meme en cas de plantage est que le script cree une socket sur un port donne. Mais c'est plus complexe a mettre en oeuvre.
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/06/2011, 14h03   #5
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
oui mais là pour l'usager "normal", ça devient l'usine
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 11h03   #6
Membre du Club
 
Homme
Inscription : mars 2007
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2007
Messages : 26
Points : 43
Points : 43
On ne peut pas simplement vérifier dans un ps aux que le script n'est pas lancé ? Je trouve ça carrément plus simple et plus safe.
delovan est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 21/06/2011, 11h09   #7
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
Citation:
Envoyé par delovan Voir le message
On ne peut pas simplement vérifier dans un ps aux que le script n'est pas lancé ? Je trouve ça carrément plus simple et plus safe.
non parce qu'un processus 'fou' peut être présent alors qu'il tourne plus dans la liste présentée par ps, donc c'est préférable d'avoir un marqueur "hors" activité donc un fichier ou un socket.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 11h32   #8
Membre du Club
 
Homme
Inscription : mars 2007
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2007
Messages : 26
Points : 43
Points : 43
Citation:
Envoyé par frp31 Voir le message
non parce qu'un processus 'fou' peut être présent alors qu'il tourne plus dans la liste présentée par ps
Comment se fait-ce ?
delovan est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/06/2011, 11h41   #9
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 464
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 464
Points : 9 585
Points : 9 585
Citation:
Envoyé par delovan Voir le message
On ne peut pas simplement vérifier dans un ps aux que le script n'est pas lancé ? Je trouve ça carrément plus simple et plus safe.
C'est le cas, par exemple, des processus zombies : ils ont fini d'etre executes, mais sont toujours presents.
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/06/2011, 11h55   #10
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
Citation:
Envoyé par delovan Voir le message
Comment se fait-ce ?
par ce qu'il y a des tas de statuts à un processus et il peut devenir un "zombie" par exemple, le processus apparaît donc dans ps puisqu'il a un statut "accepté" par le système.
C'est tout à fait logique puisque c'est un moyen de contrôle et de maitrise d'erreurs.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 12h16   #11
Membre du Club
 
Homme
Inscription : mars 2007
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2007
Messages : 26
Points : 43
Points : 43
De mémoire, un process zombie est affiché avec un tag [defunct]. Il est donc facile de le repérer, et de le tuer, non ?
delovan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 13h55   #12
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
par exemple oui mais comme tu viens de le dire toi même il apparaît bien donc se fier au "ps" n'est pas bon. ( ça n'a rien de politique hein )
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h19.


 
 
 
 
Partenaires

Hébergement Web