Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[CRON] probleme de lancement de script (resolu)
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
Farnsworth
Guru
Guru


Joined: 04 Feb 2003
Posts: 355
Location: Aix en Pce, France

PostPosted: Mon Jan 22, 2007 7:06 pm    Post subject: [CRON] probleme de lancement de script (resolu) Reply with quote

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
View user's profile Send private message
Farnsworth
Guru
Guru


Joined: 04 Feb 2003
Posts: 355
Location: Aix en Pce, France

PostPosted: Tue Jan 23, 2007 10:53 am    Post subject: Reply with quote

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
View user's profile Send private message
netfab
Veteran
Veteran


Joined: 03 Mar 2005
Posts: 1964
Location: 127.0.0.1

PostPosted: Tue Jan 23, 2007 12:16 pm    Post subject: Reply with quote

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
View user's profile Send private message
Farnsworth
Guru
Guru


Joined: 04 Feb 2003
Posts: 355
Location: Aix en Pce, France

PostPosted: Tue Jan 23, 2007 1:04 pm    Post subject: Reply with quote

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
View user's profile Send private message
Prophidys
n00b
n00b


Joined: 23 May 2006
Posts: 42

PostPosted: Tue Jan 23, 2007 1:14 pm    Post subject: Reply with quote

Essaye de donner le script en entier !
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Tue Jan 23, 2007 1:18 pm    Post subject: Reply with quote

oui je suis interessé par le script. ça doit venir de là
Back to top
View user's profile Send private message
Prophidys
n00b
n00b


Joined: 23 May 2006
Posts: 42

PostPosted: Tue Jan 23, 2007 1:21 pm    Post subject: Reply with quote

les grands esprits se rencontrent :P
Back to top
View user's profile Send private message
Farnsworth
Guru
Guru


Joined: 04 Feb 2003
Posts: 355
Location: Aix en Pce, France

PostPosted: Tue Jan 23, 2007 2:15 pm    Post subject: Reply with quote

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
View user's profile Send private message
Prophidys
n00b
n00b


Joined: 23 May 2006
Posts: 42

PostPosted: Tue Jan 23, 2007 3:29 pm    Post subject: Reply with quote

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
View user's profile Send private message
Farnsworth
Guru
Guru


Joined: 04 Feb 2003
Posts: 355
Location: Aix en Pce, France

PostPosted: Tue Jan 23, 2007 3:49 pm    Post subject: Reply with quote

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
View user's profile Send private message
_droop_
l33t
l33t


Joined: 30 May 2004
Posts: 957

PostPosted: Tue Jan 23, 2007 4:12 pm    Post subject: Reply with quote

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
View user's profile Send private message
neysx
Retired Dev
Retired Dev


Joined: 27 Jan 2003
Posts: 795

PostPosted: Tue Jan 23, 2007 5:45 pm    Post subject: Reply with quote

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
View user's profile Send private message
Farnsworth
Guru
Guru


Joined: 04 Feb 2003
Posts: 355
Location: Aix en Pce, France

PostPosted: Tue Jan 23, 2007 6:31 pm    Post subject: Reply with quote

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 :?
_________________
Good news everyone!
Back to top
View user's profile Send private message
Farnsworth
Guru
Guru


Joined: 04 Feb 2003
Posts: 355
Location: Aix en Pce, France

PostPosted: Tue Jan 23, 2007 6:54 pm    Post subject: Reply with quote

Ouppss...
j'ai un petit peu oublie le ! dans la ligne de shell de mon script :oops:
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
View user's profile Send private message
Farnsworth
Guru
Guru


Joined: 04 Feb 2003
Posts: 355
Location: Aix en Pce, France

PostPosted: Tue Jan 23, 2007 10:22 pm    Post subject: Reply with quote

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
View user's profile Send private message
Farnsworth
Guru
Guru


Joined: 04 Feb 2003
Posts: 355
Location: Aix en Pce, France

PostPosted: Wed Jan 24, 2007 5:30 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum