View previous topic :: View next topic |
Author |
Message |
Farnsworth Guru
![Guru Guru](/images/ranks/rank_rect_3.gif)
![](images/avatars/gallery/Futurama/cartoon_futurama_farnsworth_2.gif)
Joined: 04 Feb 2003 Posts: 355 Location: Aix en Pce, France
|
Posted: Mon Jan 22, 2007 7:06 pm Post subject: [CRON] probleme de lancement de script (resolu) |
|
|
Bonjour,
Je suis en train d'essayer de me mettre en place un script de reconnexion automatique a mon AP wifi que je perds tres frequemment.
Donc je souhaite mettre un script de reconnexion qui serait execute toutes les minutes par exemple dans la crontab.
Seul probleme, au debut de ce script je verifie s'il ne tourne pas deja (si le script tourne deja il sort, ensuite si la connexion est OK il sort aussi, mais si elle est KO il tente de se reconnecter plusieurs fois et ca peut durer plus ou moins longtemps, la demande d'adresse DHCP est parfois tres longue), mais quand je fais mon 'ps -ef | grep `basename $0` | grep -v grep | grep -v $$' (je cherche un eventuel process portant le meme nom, mais dont le PID serait different du mien) je me retrouve en permanence avec une reponse de 1 ou plusieurs lignes quand c'est lance par la crontab.
quand je lance mon script a la main ca fonctionne tres bien, en revanche via la crontab il detecte tout le temps qu'un script est deja en execution alors que ca n'est pas le cas.
Si je fais un script qui fait simplement:
Quote: | echo $$
ps -ef | grep `basename $0` | grep -v grep |
Et que je le met dans la crontab, je me retrouve avec ca:
Quote: | 22305
root 22302 22301 0 20:01 ? 00:00:00 /bin/sh -c /root/test.sh >> /tmp/test.log 2>&1
root 22305 22302 0 20:01 ? 00:00:00 /bin/sh -c /root/test.sh >> /tmp/test.log 2>&1
23750
root 23749 23746 0 20:02 ? 00:00:00 /bin/sh -c /root/test.sh >> /tmp/test.log 2>&1
root 23750 23749 0 20:02 ? 00:00:00 /bin/sh -c /root/test.sh >> /tmp/test.log 2>&1
... |
Est-ce normal? j'ai essaye de voir si je n'avais pas plusieurs cron qui tournaient mais ca n'a pas l'air d'etre le cas...
un autre script me renvoi plus de process (5) c'est vraiment etrange!
Merci,
Max _________________ Good news everyone!
Last edited by Farnsworth on Wed Jan 24, 2007 5:31 pm; edited 3 times in total |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
Farnsworth Guru
![Guru Guru](/images/ranks/rank_rect_3.gif)
![](images/avatars/gallery/Futurama/cartoon_futurama_farnsworth_2.gif)
Joined: 04 Feb 2003 Posts: 355 Location: Aix en Pce, France
|
Posted: Tue Jan 23, 2007 10:53 am Post subject: |
|
|
Personne pour m'aider, c'est tres genant ce truc, je ne peux pas faire ce que je souhaite.
ou alors si vous avez un autre moyen de reconnexion auto? (mais je suis quand meme interesse par la resolution de mon probleme de cron ) _________________ Good news everyone! |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
netfab Veteran
![Veteran Veteran](/images/ranks/rank_rect_5_vet.gif)
Joined: 03 Mar 2005 Posts: 1964 Location: 127.0.0.1
|
Posted: Tue Jan 23, 2007 12:16 pm Post subject: |
|
|
Salut,
Pourquoi ne pas utiliser un fichier temporaire pour détecter si ton script est en cours d'éxécution ou non ?
Au début de ton script, tu regardes si le fichier /tmp/.monfichiertemp existe.
Si oui, tu sors, si non, tu le créés. Et à la fin d'une éxécution complète, tu le supprimes. |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
Farnsworth Guru
![Guru Guru](/images/ranks/rank_rect_3.gif)
![](images/avatars/gallery/Futurama/cartoon_futurama_farnsworth_2.gif)
Joined: 04 Feb 2003 Posts: 355 Location: Aix en Pce, France
|
Posted: Tue Jan 23, 2007 1:04 pm Post subject: |
|
|
Merci,
j'y ai pense, mais si le script se termine mal (arret de la machine pendant le script ou autre) le fichier reste en place et il ne redemarrera pas tout seul par la suite (ou alors il faut que je le supprime au boot ou alors que je compare la date du dernier boot avec la date du fichier).
c'est effectivement une solution, mais je preferai passer par une verif en "temps reel", pas par l'existance d'un fichier.
ce qui m'etonne la dedans, c'est le comportement de la crontab, pourquoi je me retrouve avec plusieurs process lances au meme moment, qui portent le meme nom et qui ont en plus des liens de parenté? _________________ Good news everyone! |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
Prophidys n00b
![n00b n00b](/images/ranks/rank_rect_0.gif)
Joined: 23 May 2006 Posts: 42
|
Posted: Tue Jan 23, 2007 1:14 pm Post subject: |
|
|
Essaye de donner le script en entier ! |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
kwenspc Advocate
![Advocate Advocate](/images/ranks/rank-G-1-advocate.gif)
![](images/avatars/60652782845d9438939a35.jpg)
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Tue Jan 23, 2007 1:18 pm Post subject: |
|
|
oui je suis interessé par le script. ça doit venir de là |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
Prophidys n00b
![n00b n00b](/images/ranks/rank_rect_0.gif)
Joined: 23 May 2006 Posts: 42
|
Posted: Tue Jan 23, 2007 1:21 pm Post subject: |
|
|
les grands esprits se rencontrent ![Razz :P](images/smiles/icon_razz.gif) |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
Farnsworth Guru
![Guru Guru](/images/ranks/rank_rect_3.gif)
![](images/avatars/gallery/Futurama/cartoon_futurama_farnsworth_2.gif)
Joined: 04 Feb 2003 Posts: 355 Location: Aix en Pce, France
|
Posted: Tue Jan 23, 2007 2:15 pm Post subject: |
|
|
je l'ai deja donne plus haut, il manque juste le debut:
#!/bin/ksh ou bash je sais plus
echo $$
ps -ef | grep `basename $0` | grep -v grep
c'est tout ce qu'il fait.
enfin ca c'est mon script de test, l'autre si vous le voulez faudra attendre ce soir
sachant que l'un comme l'autre, quand je les execute a la mano ils fonctionnent correctement! _________________ Good news everyone! |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
Prophidys n00b
![n00b n00b](/images/ranks/rank_rect_0.gif)
Joined: 23 May 2006 Posts: 42
|
Posted: Tue Jan 23, 2007 3:29 pm Post subject: |
|
|
Je crois que cron fork ton script pour le passer en demon si je me rappel mes cours lointain de systeme unix. Bref il lance le script et le fork aussitot ... Enfin c'est ce que ca semble faire ... Aprés je ne peut en être certain a 100% |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
Farnsworth Guru
![Guru Guru](/images/ranks/rank_rect_3.gif)
![](images/avatars/gallery/Futurama/cartoon_futurama_farnsworth_2.gif)
Joined: 04 Feb 2003 Posts: 355 Location: Aix en Pce, France
|
Posted: Tue Jan 23, 2007 3:49 pm Post subject: |
|
|
Non, je ne crois pas, en tout cas ca me dit rien et pourtant j'en ai fait pas mal des scripts unix.
Je viens de tester sous aix, j'obtiens ca:
Code: | 96396
root 96396 11616 5 16:47:00 - 0:00 /bin/ksh /root/test.sh
28544
root 28544 11616 5 16:49:00 - 0:00 /bin/ksh /root/test.sh |
le process pere (11616) est bien le demon cron, tout est logique la:
Code: | [root]/root ps -ef | grep 11616
root 11616 1 0 Sep 05 - 0:26 /usr/sbin/cron |
faudrait que je teste avec un autre cron (j'utilise vixie-cron je crois), je sais pas trop ce qui existe... _________________ Good news everyone! |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
_droop_ l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
Joined: 30 May 2004 Posts: 957
|
Posted: Tue Jan 23, 2007 4:12 pm Post subject: |
|
|
Salut,
Je vois que tu as 2 processus dont un est le fils de l'autre. A priori c'est normal (je me rappelle plus pourquoi, une histoire de fork par le shell).
Dans mon script pour detecter les processus doublons sans détecter le père je un truc de ce genre :
Code: | ppid = `ps -ef | awk \'{if (\$2 == $$) {print \$3}}\'`
ps -ef | grep './$scriptFileName' | grep -v grep | grep -v $$ | awk "{if (\$2 != $ppid) {print \$2}}" |
|
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
neysx Retired Dev
![Retired Dev Retired Dev](/images/ranks/rank-retired.gif)
![](images/avatars/17295657453e350b33c0b78.jpg)
Joined: 27 Jan 2003 Posts: 795
|
Posted: Tue Jan 23, 2007 5:45 pm Post subject: |
|
|
Code: | #!/bin/bash
pstree -Alp | grep `basename $0` | grep -v $$ > /dev/null && echo RAF && exit
echo Au boulot! && sleep 65 |
crontab -l wrote: | # DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.XXXXnGKMp8 installed on Tue Jan 23 18:32:26 2007)
# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)
* * * * * cd /home/neysx ; ./truc.sh |
|
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
Farnsworth Guru
![Guru Guru](/images/ranks/rank_rect_3.gif)
![](images/avatars/gallery/Futurama/cartoon_futurama_farnsworth_2.gif)
Joined: 04 Feb 2003 Posts: 355 Location: Aix en Pce, France
|
Posted: Tue Jan 23, 2007 6:31 pm Post subject: |
|
|
Yes, merci, ca me plait bien cette soluce, je teste ca rapidement.
par contre, c'est quand meme tres etrange comme comportement avec tous ces forks, j'ai remis mon script original en place et voila ce qu'il me logue:
Code: | 11037
root 11036 11034 0 19:20 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11037 11036 0 19:20 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11039 11037 0 19:20 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11040 11039 0 19:20 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11041 11037 0 19:20 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
ca marche
11095
root 11093 11092 0 19:21 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11095 11093 0 19:21 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
ca marche
11144
root 11141 11140 0 19:22 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11144 11141 0 19:22 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
ca marche
11191
root 11190 11189 0 19:23 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11191 11190 0 19:23 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11193 11191 0 19:23 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11194 11193 0 19:23 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11195 11194 0 19:23 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
ca marche
11245
root 11238 11237 0 19:24 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11245 11238 0 19:24 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11247 11245 0 19:24 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11248 11247 0 19:24 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11249 11245 0 19:24 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
ca marche
11287
root 11285 11284 0 19:25 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11287 11285 0 19:25 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
ca marche
11350
root 11347 11346 0 19:26 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11350 11347 0 19:26 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11352 11350 0 19:26 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11353 11352 0 19:26 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
root 11354 11353 0 19:26 ? 00:00:00 /bin/sh -c /root/reconnect.sh 2 >> /tmp/reconnect.log 2>&1
ca marche |
et voici le script en question:
Code: | #/bin/bash
echo $$
ps -ef | grep `basename $0` | grep -v grep
#ps -ef | grep `basename $0` | grep -v grep | grep -v $$ > /dev/null 2>&1
#if [ $? = 0 ] #le script tourne deja
#then
#echo deja en execution. sortie!
#exit
#fi
if [ -z $1 ]
then
count=5
else
count=$1
fi
for i in `/usr/bin/seq $count`
do
/etc/init.d/net.ra0 status > /dev/null 2>&1
/bin/ping -c 1 -w 3 -W 3 -n 212.27.53.252 > /dev/null 2>&1
if [ $? = 0 ] #Ca marche
then
/usr/bin/echo ca marche
break
else #Ca marche po / On relance
/usr/bin/echo essai $i
/sbin/ifconfig ra0 up && /etc/init.d/net.ra0 --verbose restart
/usr/bin/sleep 2
fi
done |
vraiment etrange comme comportement, parceque un pere et un fils je veux bien, mais la c'est aleatoire, j'en ai jusqu'a 5 en simultane ![Confused :?](images/smiles/icon_confused.gif) _________________ Good news everyone! |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
Farnsworth Guru
![Guru Guru](/images/ranks/rank_rect_3.gif)
![](images/avatars/gallery/Futurama/cartoon_futurama_farnsworth_2.gif)
Joined: 04 Feb 2003 Posts: 355 Location: Aix en Pce, France
|
Posted: Tue Jan 23, 2007 6:54 pm Post subject: |
|
|
Ouppss...
j'ai un petit peu oublie le ! dans la ligne de shell de mon script
du coup il devait forker un peu bizarrement, en la rajoutant je n'ai plus que que ca:
Code: | root 14433 14432 0 19:52 ? 00:00:00 /bin/sh -c /root/reconnect.sh 10 >> /tmp/reconnect.log 2>&1
root 14434 14433 0 19:52 ? 00:00:00 /bin/bash /root/reconnect.sh 10
root 14436 14434 0 19:52 ? 00:00:00 /bin/bash /root/reconnect.sh 10 |
bon, du coup je comprends un peu mieux mais je trouve ca etrange quand meme
bref, ca marche avec pstree.
Merci bien.
++ _________________ Good news everyone! |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
Farnsworth Guru
![Guru Guru](/images/ranks/rank_rect_3.gif)
![](images/avatars/gallery/Futurama/cartoon_futurama_farnsworth_2.gif)
Joined: 04 Feb 2003 Posts: 355 Location: Aix en Pce, France
|
Posted: Tue Jan 23, 2007 10:22 pm Post subject: |
|
|
non, finallement ca ne marche pas, il me dit de temps en temps que le script tourne deja alors que ca n'est pas le cas...
donc le sujet est toujours ouvert, je ne comprends pas bien ce comportement. _________________ Good news everyone! |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
Farnsworth Guru
![Guru Guru](/images/ranks/rank_rect_3.gif)
![](images/avatars/gallery/Futurama/cartoon_futurama_farnsworth_2.gif)
Joined: 04 Feb 2003 Posts: 355 Location: Aix en Pce, France
|
Posted: Wed Jan 24, 2007 5:30 pm Post subject: |
|
|
bon, apres divers essais j'ai enfin trouve, c'est simplement ma commande 'ps' avec le `basename` et les grep dedans qui me cree de nouveaux process, il me suffit de mettre ce basename dans une variable au debut du shell, de rediriger le ps dans un fichier et de faire le tri ensuite et je n'ai plus le souci...
j'espere que ce coup-ci est le bon, parceque je desespere la
etrange quand meme comme comportement, je sais pas pourquoi les process portent le meme nom
la bidouille en question pour ceux que ca interesserait:
Code: | ps -ef > /tmp/reconnect_$$
grep `basename $0` /tmp/reconnect_$$ | grep -v grep | grep -v $$ | grep -v `ps -fp $$ | tail -1 | awk ' { printf $3 } '` > /dev/null 2>&1 |
je garde les scripts qui portent le meme nom, j'elimine mon numero de process et mon pere de la liste (et les eventuels grep). _________________ Good news everyone! |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
|