Ordre d'execution des commandes dans un script - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 10-04-2003 à 09:26:27
c possible.
mais un sleep 30 dans ton script après l'éxécution de ton prog pour tester.
après il y a surement des solutions plus "propres", avec wait peut-être
Marsh Posté le 10-04-2003 à 09:28:27
Oui j'ai pensé au sleep. Ca me parait une bonne idée mais un peu crados car il y a plusieurs centaines d'exemplaire de ce script lancé à heure fixe par cron. Déjà que c lent , il me parait important d'économiser chaque seconde.
Marsh Posté le 10-04-2003 à 09:29:45
je rencontre de tps à autre ce genre de prb avec mes programmes perl
c'est à mon sens un problème de buffer, ton prog garde en mémoire les données qu'il doit écrire dans ton fichier de destination mais prend son temps pour les écrire, trop de temps a priori car la commande suivante est exécutée avant que les données ne soient écrites
c'est possible de faire du fflush ou du autoflush dans un script shell ?
Marsh Posté le 10-04-2003 à 09:34:43
Sorg a écrit : Je connais pas ces commandes. Ca fait quoi ? |
ben, fflush c'est pour le C et autoflush pour Perl, ça force les buffers d'un prog à écrire les données dans les fichiers à chaque fois que le prog doit les écrire, ce qui fait qu'il ne les bufferise plus
tu veux pas filer ton code complet que je te ponde le script Perl correspondant (du - je v essayer) ?
Marsh Posté le 10-04-2003 à 10:18:10
ReplyMarsh Posté le 10-04-2003 à 11:52:30
Linux n'écrit pas immédiatement les infos sur le disque mais je ne pensais pas que ça pouvait engendrer des erreurs dans ce genre
Une autre solution :
toto="`petit_programme --parametre`"
[ -n "$toto" ] && echo "$toto" | mail -s "rapport" bidule@domaine.com
Marsh Posté le 10-04-2003 à 13:43:21
Aricoh a écrit : ben, fflush c'est pour le C et autoflush pour Perl, ça force les buffers d'un prog à écrire les données dans les fichiers à chaque fois que le prog doit les écrire, ce qui fait qu'il ne les bufferise plus |
Code :
|
Voilà le script actuel. (Par contre il y a des retours de chariots un peu partout qui se sont foutu alors j'ai séparé chaque ligne par une ligne blanche.)
Marsh Posté le 10-04-2003 à 14:36:39
et si tu met #!/usr/bin/bash au lieu de #!/bin/sh.
Ca donne quoi?
Marsh Posté le 10-04-2003 à 17:58:22
Le problème vient tout simplement du fait que tu vérifie
if test -s fichier_de_destination
et non pas if test -s /path/to/fichier_de_destination
Marsh Posté le 10-04-2003 à 18:40:07
tu est sur de çà ? parce que si j'execute ligne par ligne çà fonctionne.
Edit: Si je vire le test est que je fais envoyer le mail systématiquement après la génération du fichier, je recois un mail vide alors que le fichier contient bien qqch. Je tendrais donc plutot à croire l'autre hypothèse: celle de l'histoire des buffers.
Marsh Posté le 10-04-2003 à 18:42:26
ArSuniK a écrit : Linux n'écrit pas immédiatement les infos sur le disque mais je ne pensais pas que ça pouvait engendrer des erreurs dans ce genre |
Marche pas
Marsh Posté le 10-04-2003 à 18:48:28
Ben oui, ca me parait tout à fait logique.
En test : envoye le résultat de $(ls) plutot que le contenu du fichier pour t'en convaincre.
Marsh Posté le 10-04-2003 à 18:57:44
becket a écrit : Ben oui, ca me parait tout à fait logique. |
Je viens de tester , le 'ls' me renvoie une taille non nulle.
Marsh Posté le 11-04-2003 à 09:35:47
Finalement je fais çà:
Code :
|
Et çà marche! Merci à tous
Marsh Posté le 10-04-2003 à 09:19:47
J'ai un script qui grosso merdo fais ceci:
Le but est que le petit_programme me génère un fichier texte qui est ensuite envoyé par mail si il n'est pas vide.
La taille du fichier texte généré varie entre 0 et 30 ko et petit_programme met une vingtaine de seonde à s'éxécuter.
Mon souci est que lorsque ce script est executer il trouve en général que la taille du fichier_de_destination est nul alors que si je la regarde par un ls -l elle est non nulle. Du coup le mail n'est pas envoyé alors qu'il devrais.
Si j'execute le script ligne par ligne à la main il fonctionne.
D'ou ma question. Avant de passer à la ligne suivante du script est ce que çà attend que la ligne en cours soit complètement exécutée? en clair vu que petit_programme met une vingtaine de seconde à s'éxécuter , est-ilpossible que le test sur la taille u fichier généré se fasse avant la fin de l'exécution de peti_programme ?
Merci de votre aide.
Sorg