Bonjour,
J'ai de temps en temps un souci dans des scripts bash avec des écrit ures
dans un fichier pas
encore "vues" au moment où je regarde si y'en a eu.
En gros, du
# stdout dans un rapport (avec préfixe de date)
exec > >(while read line; do echo "[$(date '+%F %T')] $line" >> $RAPPORT;
done)
echo "un truc"
â¦
# si le rapport est non vide on l'envoie
[ -s $RAPPORT ] && mail -s "rapport du $(date +%F)" root < $RAPPORT
Mais le test ci-dessus marche pas toujours, le fichier est parfois vu vid e
au moment du test
alors qu'il y a bien eu une écriture de lancée (un test [ $(wc -l <
$RAPPORT) -gt 0 ] ne fait
pas mieux).
C'est probablement lié à mon exec qui récupère la sor tie standard et se
fait visiblement en
asynchrone, ou ne met pas à jour les infos en live, je sais pas exac tement.
Ajouter un sleep 1 avant de tester règle en général le pb, mais ça me
parait pas très propre
ni très fiable (pourquoi 1, pas sûr que ça suffise toujour s, etc.).
Un sync avant de tester fonctionnerait probablement, mais c'est trop
violent (ça synchronise
tout le filesystem, sur une machine avec un moteur de base de donnée s
chargé ça peut figer un
peu trop longtemps les I/O Ã un mauvais moment).
Une idée pour faire ça correctement ?
Merci
--
Daniel
Bonjour,
J'ai de temps en temps un souci dans des scripts bash avec des écrit ures
dans un fichier pas
encore "vues" au moment où je regarde si y'en a eu.
En gros, du
# stdout dans un rapport (avec préfixe de date)
exec > >(while read line; do echo "[$(date '+%F %T')] $line" >> $RAPPORT;
done)
echo "un truc"
â¦
# si le rapport est non vide on l'envoie
[ -s $RAPPORT ] && mail -s "rapport du $(date +%F)" root < $RAPPORT
Mais le test ci-dessus marche pas toujours, le fichier est parfois vu vid e
au moment du test
alors qu'il y a bien eu une écriture de lancée (un test [ $(wc -l <
$RAPPORT) -gt 0 ] ne fait
pas mieux).
C'est probablement lié à mon exec qui récupère la sor tie standard et se
fait visiblement en
asynchrone, ou ne met pas à jour les infos en live, je sais pas exac tement.
Ajouter un sleep 1 avant de tester règle en général le pb, mais ça me
parait pas très propre
ni très fiable (pourquoi 1, pas sûr que ça suffise toujour s, etc.).
Un sync avant de tester fonctionnerait probablement, mais c'est trop
violent (ça synchronise
tout le filesystem, sur une machine avec un moteur de base de donnée s
chargé ça peut figer un
peu trop longtemps les I/O Ã un mauvais moment).
Une idée pour faire ça correctement ?
Merci
--
Daniel
Bonjour,
J'ai de temps en temps un souci dans des scripts bash avec des écrit ures
dans un fichier pas
encore "vues" au moment où je regarde si y'en a eu.
En gros, du
# stdout dans un rapport (avec préfixe de date)
exec > >(while read line; do echo "[$(date '+%F %T')] $line" >> $RAPPORT;
done)
echo "un truc"
â¦
# si le rapport est non vide on l'envoie
[ -s $RAPPORT ] && mail -s "rapport du $(date +%F)" root < $RAPPORT
Mais le test ci-dessus marche pas toujours, le fichier est parfois vu vid e
au moment du test
alors qu'il y a bien eu une écriture de lancée (un test [ $(wc -l <
$RAPPORT) -gt 0 ] ne fait
pas mieux).
C'est probablement lié à mon exec qui récupère la sor tie standard et se
fait visiblement en
asynchrone, ou ne met pas à jour les infos en live, je sais pas exac tement.
Ajouter un sleep 1 avant de tester règle en général le pb, mais ça me
parait pas très propre
ni très fiable (pourquoi 1, pas sûr que ça suffise toujour s, etc.).
Un sync avant de tester fonctionnerait probablement, mais c'est trop
violent (ça synchronise
tout le filesystem, sur une machine avec un moteur de base de donnée s
chargé ça peut figer un
peu trop longtemps les I/O Ã un mauvais moment).
Une idée pour faire ça correctement ?
Merci
--
Daniel
$LOGERR
$LOGSTD
$LOGERR
$LOGSTD
$LOGERR
$LOGSTD