Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
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 15/03/2007, 12h05   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 35
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 35
Points : 11
Points : 11
Par défaut Lancement unique d'un script

Bonjour,

Contexte: Programmation shell sous UNIX

Le problème: Mon script ne doit pas pouvoir être relancé si il est déjà en cours.

La solution: créer un fichier temporaire au lancement du script après vérification de son existence (ou mettre le numero du process etc...)
mais ca ne me plait pas beaucoup de creer un fichier.

Utilisé la commande "ps" me tente plus.
mais tous les scripts ont pour nom "-ksh" ce qui ne me permet pas de filtrer sur le processus correspondant à mon script.

Sachant que je n'ai pas de droit root sur les serveurs (pas de modification de conf possible), comment puis-je faire?
Peut-on tagger le nom d'un processus au lancement afin d'utiliser un ps et un grep sur le tagg?

Merci d'avance!
clad523 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 12h14   #2
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 8 741
Détails du profil
Informations personnelles :
Âge : 54

Informations forums :
Inscription : janvier 2007
Messages : 8 741
Points : 9 975
Points : 9 975
ben ton script il lance une application ou il est autonome ??
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java

Je ne réponds pas aux MP techniques
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 12h16   #3
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 8 741
Détails du profil
Informations personnelles :
Âge : 54

Informations forums :
Inscription : janvier 2007
Messages : 8 741
Points : 9 975
Points : 9 975
tu peux si tu veux juste faire un "touch nom_du_script_demarre" dans /tmp, et ta première instruction du script serait "if /tmp/nom_du_script_demarre existe" exit ..

Et si tu as fini ton scirpt, sa dernière instruction est "rm -f .."

Non ?
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java

Je ne réponds pas aux MP techniques
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 12h32   #4
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 450
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 450
Points : 7 553
Points : 7 553
Utiliser une variable du shell pour enregistrer l'état d'exécution du script :
Code :
1
2
3
4
5
6
7
8
if [[ -n "${SCRIPTENCOURS} ]]
then
  echo "$0 déjà en cours d'exécution"
else
  export SCRIPTENCOURS=$$
  # ... Traitement à effectuer 
  undef SCRIPTENCOURS
fi
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 13h37   #5
Expert Confirmé
 
Avatar de Katyucha
 
Inscription : mars 2004
Messages : 3 109
Détails du profil
Informations personnelles :
Âge : 31
Localisation : Allemagne

Informations forums :
Inscription : mars 2004
Messages : 3 109
Points : 3 313
Points : 3 313
La méthode assez utilisée , c'est la création d'un fichier de lock dans /var/lock par exemple

Au début du script

Code :
1
2
3
4
5
6
7
if [[ -d /var/lock/mon_programme.lock ]]
then
    echo "script déja en cours"
    exit 255
else
    touch /var/lock/mon_programme.lock
fi
et à la fin de ton script avant un exit ,
Code :
rm /var/lock/mon_programme.lock
__________________
Ancien Rédacteur Linux && Unix / Nouveau retraité de DVP
The UNIX way of sex:
gunzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep

Je ne réponds ni aux messages privées, ni aux messages plein de fautes...
Katyucha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 14h44   #6
Candidat au titre de Membre du Club
 
Inscription : juillet 2004
Messages : 35
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 35
Points : 11
Points : 11
Par défaut Merci à tous

Je vais utiliser la solution de "al1_24" car il n'utilise pas de fichier temporaire et c'est ce qui m'interressait. Merci encore à tous pour votre rapidité!
clad523 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 14h54   #7
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 8 741
Détails du profil
Informations personnelles :
Âge : 54

Informations forums :
Inscription : janvier 2007
Messages : 8 741
Points : 9 975
Points : 9 975
si tu veux mais c'est moins sûr : il faut que cette variable soit définie pour TOUS les utilisateurs, dans les .xxxrc ... et un script lançant un autre script peut ne pas l'exécuter..
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java

Je ne réponds pas aux MP techniques
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h06.


 
 
 
 
Partenaires

Hébergement Web