|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juillet 2009 Messages : 6 ![]() |
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 :
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 |
||
|
|
10
|
|
|
#2 | ||
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 534 ![]() |
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 :
|
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juillet 2009 Messages : 6 ![]() |
Bien sûr !! C'est tellement simple quand on y pense.
Merci beaucoup pour le coup de main. Jean |
|
|
10
|
|
|
#4 |
![]() ![]() R&D en systemes informatiques bas niveau Unix/Linux Inscription : mai 2004 Messages : 5 464 ![]() |
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. |
|
|
10
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 534 ![]() |
oui mais là pour l'usager "normal", ça devient l'usine
|
|
|
00
|
|
|
#6 |
|
Membre du Club
![]() Inscription : mars 2007 Messages : 26 ![]() |
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.
|
|
01
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 534 ![]() |
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.
|
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Inscription : mars 2007 Messages : 26 ![]() |
|
|
10
|
|
|
#9 |
![]() ![]() R&D en systemes informatiques bas niveau Unix/Linux Inscription : mai 2004 Messages : 5 464 ![]() |
C'est le cas, par exemple, des processus zombies : ils ont fini d'etre executes, mais sont toujours presents.
|
|
|
10
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 534 ![]() |
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. |
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() Inscription : mars 2007 Messages : 26 ![]() |
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 ?
|
|
00
|
|
|
#12 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 534 ![]() |
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
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com