OVH Cloud OVH Cloud

Traitement parallele et logs

2 réponses
Avatar
xavier
Bonjour,

J'ai un script qui est appelé plusieurs fois en parallèle. Je voudrais
bufferiser la sortie dans un fichier de log (par exemple pas comme
syslog, c'est une galère de décortiquer une session SMTP lorsque postfix
est forké 25 ou 30 fois)

Pour l'instant, ce que je fais est


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#! /bin/sh

montraitement >> log.$$
echo "blah" >> log.$$


/usr/local/bin/lockfile -3 -r 30 .lock
cat log.$$ >> /var/log/myscript.log
rm -f .lock
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Ben c'est sûr que je gaspille pas mal de temps à attendre que l'un des
10 autres process ait lache le fichier.

Ce que je pense, est faire un démon séparé - ou une tache cron-, qui va
collecter tous les log.nnn, les balancer dans myscript.log, et les
effacer ensuite.

Le problème est que je peux attraper un des fichier log.$$ qui sot en
cours d'écriture.

Une solution pourrait être :

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#! /bin/sh

touch lock.$$
montraitement >> log.$$
echo "blah" >> log.$$
rm -f lock.$$

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Ainsi, je ne traite dans mon "log collector" que les fichiers qui n'ont
pas de lock associé.

Ca tien debout, tout ça ?

Merci,

XAv
--
Xavier HUMBERT
INJEP - NetBSD, parce que je le vaux bien

2 réponses

Avatar
Unknown
Le Tue, 22 Jun 2004 15:20:09 +0200, Xavier HUMBERT a écrit :

Bonjour,

J'ai un script qui est appelé plusieurs fois en parallèle. Je voudrais
bufferiser la sortie dans un fichier de log (par exemple pas comme
syslog, c'est une galère de décortiquer une session SMTP lorsque postfix
est forké 25 ou 30 fois)


utilise un fichier fifo

tu fais mkfifo /tmp/fifoLogs
puis un script qui gere les logs du genre :
while :
do
cat /tmp/fifoLogs >> /var/log/vraiLogs
done

ensuite tes programmes écrivent dans /tmp/fifoLogs

Avatar
Stephane Chazelas
2004-06-22, 15:20(+02), Xavier HUMBERT:
[...]
Le problème est que je peux attraper un des fichier log.$$ qui sot en
cours d'écriture.
[...]


Tu peux ecrire dans un fichier tmplog.$$ et le renommer en
log.$$ quand c'est fini.

--
Stephane