probleme de cron

probleme de cron - Linux et OS Alternatifs

Marsh Posté le 12-05-2005 à 21:51:51    

Hello
 
j'ai placé dans ma crontab 3 scripts bash dans un contexte d'utilisation de tethereal pour sniffer des paquets sur une connexion FTP qui s'effectue depuis une IP fixe vers mon serveur.
 
Mon premier script lance tethereal via screen à 9h du matin.
Mon second script change le owner/group toutes les minutes des dumps effectués par tethereal afin qu'il soit lisible par un autre user
Mon troisieme script stop tethereal à 17h
 
Si j'execute mes scripts à la main, aucun probleme, tout se passe normalement.
 
Si je laisse tourner ma crontab, le script qui lance tethereal s'execute, et le script qui change le owner/group sur les dumps fonctionne (j'ai activé le log de cron). Puis, au bout de 3 à 4 minutes, plus rien. Mon screen avec tethereal est toujours dans les process mais un `ps aux | grep cron` m'indique que cron ne tourne plus ! Je dois alors le relancer via /etc/init.d, et ca repart pour fonctionner pendant 3 à 4 minutes, et rebelote, plantage ..  
 
Je precise que j'ai mis le chemin complet vers les commandes dans mes script (/usr/bin/tethereal, /usr/bin/screen,...), les scripts sont bien executables.
 
OS : Debian Stable.
 
Merci!


Message édité par syl94 le 12-05-2005 à 21:53:05
Reply

Marsh Posté le 12-05-2005 à 21:51:51   

Reply

Marsh Posté le 12-05-2005 à 22:00:05    

Citation :

j'ai activé le log de cron


justement que t'indique les logs de cron ?

Reply

Marsh Posté le 12-05-2005 à 22:12:51    

rien justement .. je vois bien l'évenement de l'execution du script qui change les permissions sur les fichiers, puis plus rien ... pas d'erreur ou de warning, ni dans /var/log/messages ou /var/log/syslog


Message édité par syl94 le 12-05-2005 à 22:13:04
Reply

Marsh Posté le 12-05-2005 à 22:13:28    

tu pourrais me montrer le contenu de la crontab ?

Reply

Marsh Posté le 12-05-2005 à 22:17:02    

Code :
  1. # /etc/crontab: system-wide crontab
  2. # Unlike any other crontab you don't have to run the `crontab'
  3. # command to install the new version when you edit this file.
  4. # This file also has a username field, that none of the other crontabs do.
  5. SHELL=/bin/sh
  6. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  7. # m h dom mon dow user  command
  8. 25 6    * * *   root    test -e /usr/sbin/anacron || run-parts --report /etc/cron.daily
  9. 47 6    * * 7   root    test -e /usr/sbin/anacron || run-parts --report /etc/cron.weekly
  10. 52 6    1 * *   root    test -e /usr/sbin/anacron || run-parts --report /etc/cron.monthly
  11. #
  12. # Ethereal pour dump des connexions FTP via screen
  13. 00 09 * * * root /usr/local/libexec/ethereal.sh
  14. # Kill du screen tethereal
  15. 00 17 * * * root /usr/local/libexec/stop_ethereal.sh
  16. # change owner/group des fichiers
  17. */1 * * * * root /usr/local/libexec/chg_ower_dump.sh


Message édité par syl94 le 12-05-2005 à 22:17:24
Reply

Marsh Posté le 12-05-2005 à 22:24:06    

le faite d'appeler chg_ower_dump toutes les minutes sachant que ethereal écrit dans ce fichier peut peut être provoquer un plantage.
Si tu changes le propriétaire du fichier uniquement quand tu appelles stop_ethereal cela fonctionne ?

Reply

Marsh Posté le 12-05-2005 à 22:27:45    

j'ai pas testé. Le probleme est que mon client peut venir récupérer les dumps a n'importe quel moment. Cela dit, vu que c'est bancale actuellement, je vais faire le test dès demain (machine en prod).
 
Merci :)

Reply

Marsh Posté le 12-05-2005 à 22:32:15    

ce que tu peux faire :
au lieu de sauvegarder uniquement le dump dans un seul fichier, tu le réparties sur plusieurs fichiers ("use ring buffer" )

Reply

Marsh Posté le 12-05-2005 à 22:39:47    

oui, c'est ce que je fais, mais je l'ai pas precisé, désolé :/
 
/usr/bin/screen -A -m -d -S ethereal $ETHEREAL -i eth0 -n -p -q -a filesize:4000 -b 100 -w $OUTFILE host xxx.xxx.xxx.xxx and port 21

Reply

Marsh Posté le 12-05-2005 à 22:44:49    

donc il faut changer les permissions des dumps qui ne sont pas en cours d'écriture
donc tout fichier de taille < 4000 octets ? ne doivent pas être soumis à un chown
 
if [ `du -b <fichier_dump>` gt 4000 ]
 
chown <user> <fichier_dump>
fi


Message édité par jlighty le 12-05-2005 à 22:51:06
Reply

Marsh Posté le 12-05-2005 à 22:44:49   

Reply

Marsh Posté le 12-05-2005 à 22:55:08    

donc quelque chose du genre  
 

Code :
  1. if [ $OUTFILE > 4000000 ];then chown bla.bla $OUTFILE;fi


 
La valeur de filesize est en kilo, mais j'ai un doute sur la syntaxe :/

Reply

Marsh Posté le 12-05-2005 à 22:59:01    

si c'est en ko -> du -k <fichier>
comment est "contruit" $OUTFILE ?
car il me semble que $OUTFILE est un nom de fichier donc tu ne pourras pas faire $OUTFILE > 4000000
par contre if [ `du -k "$OUTFILE"` > 4000 ]; then chown ... fi

Reply

Marsh Posté le 12-05-2005 à 23:03:22    

exact. $OUTFILE est du type dump_yyyymmddhhmmss.txt
 
je vais adopter le du -k sur dump_*.txt ca devrait le faire

Reply

Marsh Posté le 12-05-2005 à 23:05:34    

une boucle de ce style :

Code :
  1. for fichier in `ls | fgrep dump`; do
  2.   if [ `du -k "$fichier"` > 4000 ]; then chown ... fi
  3. done;


Message édité par jlighty le 12-05-2005 à 23:05:44
Reply

Marsh Posté le 12-05-2005 à 23:09:44    

super. Merci! Je te dis ca demain du taff

Reply

Marsh Posté le 16-05-2005 à 13:57:05    

petit UP pour completer la solution :)
 
ton script fonctionne nickel jlighty, j'ai juste du rajouter un chmod 660 dans la boucle sur les dumps générés par tethereal
 
ma cron reste bien active et les droits sont correctement alloués
 
Merci!

Reply

Marsh Posté le 16-05-2005 à 17:20:22    

Content que ça marche :),
donc l'origine du problème était bien l'accès concurrentiel au fichier dump entre Ethereal et cron

Reply

Marsh Posté le 16-05-2005 à 18:26:19    

a priori oui :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed