Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1831 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Ordre d'execution des commandes dans un script

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ordre d'execution des commandes dans un script

n°247479
sorg
trop sur HFR depuis 2001
Posté le 10-04-2003 à 09:19:47  profilanswer
 

J'ai un script qui grosso merdo fais ceci:
 

Code :
  1. petit_programme --parametre > fichier_de_destination
  2. if test -s fichier_de_destination
  3. then
  4. cat fichier_de_destination | mail -s "rapport" bidule@domaine.com
  5. fi


 
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

mood
Publicité
Posté le 10-04-2003 à 09:19:47  profilanswer
 

n°247481
nikosaka
Posté le 10-04-2003 à 09:26:27  profilanswer
 

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

n°247484
sorg
trop sur HFR depuis 2001
Posté le 10-04-2003 à 09:28:27  profilanswer
 

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.

n°247485
Aricoh
gentil mais fo po pousser
Posté le 10-04-2003 à 09:29:45  profilanswer
 

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 ?


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°247487
sorg
trop sur HFR depuis 2001
Posté le 10-04-2003 à 09:31:35  profilanswer
 

Je connais pas ces commandes. Ca fait quoi ?

n°247489
Aricoh
gentil mais fo po pousser
Posté le 10-04-2003 à 09:34:43  profilanswer
 

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) ?


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°247497
minusplus
Posté le 10-04-2003 à 10:18:10  profilanswer
 

Aricoh a écrit :


c'est possible de faire du fflush ou du autoflush dans un script shell ?

man sync

n°247527
arsunik
ma tuxitude me beastifie
Posté le 10-04-2003 à 11:52:30  profilanswer
 

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  :heink:
 
Une autre solution :
 
toto="`petit_programme --parametre`"
[ -n "$toto" ] && echo "$toto" | mail -s "rapport" bidule@domaine.com

n°247587
sorg
trop sur HFR depuis 2001
Posté le 10-04-2003 à 13:43:21  profilanswer
 

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
 
tu veux pas filer ton code complet que je te ponde le script Perl correspondant (du - je v essayer) ?


 

Code :
  1. #!/bin/sh
  2. ~vpopmail/tmda/bin/tmda-pending -c /charity/mail/domains/charityemail.net/sorg/.tmda/config -Cbs > /etc/cron.mail/.sorg@charityemail.net
  3. if test -s .sorg@charityemail.net
  4. then
  5. cat .sorg@charityemail.net |/bin/mail -s "Filtering report : `date +%d-%m-%Y`" sorg@charityemail.net
  6. fi
  7. /charity/mail/tmda/bin/tmda-pending -c /charity/mail/domains/charityemail.net/sorg/.tmda/config -q -b -d -O 32d


 
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.)


Message édité par sorg le 10-04-2003 à 13:45:10
n°247610
jls
Posté le 10-04-2003 à 14:36:39  profilanswer
 

et si tu met #!/usr/bin/bash au lieu de #!/bin/sh.
Ca donne quoi?


---------------
A Plus Donc...  [:jls]
mood
Publicité
Posté le 10-04-2003 à 14:36:39  profilanswer
 

n°247667
becket
Posté le 10-04-2003 à 17:58:22  profilanswer
 


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

n°247680
sorg
trop sur HFR depuis 2001
Posté le 10-04-2003 à 18:40:07  profilanswer
 

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.


Message édité par sorg le 10-04-2003 à 18:42:08
n°247681
sorg
trop sur HFR depuis 2001
Posté le 10-04-2003 à 18:42:26  profilanswer
 

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  :heink:
 
Une autre solution :
 
toto="`petit_programme --parametre`"
[ -n "$toto" ] && echo "$toto" | mail -s "rapport" bidule@domaine.com
 


 
Marche pas  :??:

n°247683
becket
Posté le 10-04-2003 à 18:48:28  profilanswer
 

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.

n°247689
sorg
trop sur HFR depuis 2001
Posté le 10-04-2003 à 18:57:44  profilanswer
 

becket a écrit :

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.


 
Je viens de tester , le 'ls' me renvoie une taille non nulle.

n°247855
sorg
trop sur HFR depuis 2001
Posté le 11-04-2003 à 09:35:47  profilanswer
 

Finalement je fais çà:
 

Code :
  1. #!/bin/sh
  2. toto="`~vpopmail/tmda/bin/tmda-pending -c /charity/mail/domains/charityemail.net/sorg/.tmda/config -Cbs`"
  3. echo sorg@charityemail.net
  4. if [ "$toto" = "" ]
  5. then
  6. echo Pas de mails en attente
  7. else
  8. echo "$toto" |/bin/mail -s "Filtering report : `date +%d-%m-%Y`" sorg@charityemail.net
  9. echo rapport envoyé
  10. fi


 
Et çà marche! Merci à tous


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Ordre d'execution des commandes dans un script

 

Sujets relatifs
script iptables, vous en pensez quoi ?Logon Script
qst toute bête : comment lancer l'éxécution d'un script ?[script] Verification si le périferique est bien démonté
question a 3 balles pour les pro du script : service alsa stop ??[shell] lister les fichiers d'un rep et sub-rep par ordre de date
start script pour apachecomment faire ca en script bash ?
[RESOLU] Pb d'execution mysql sur slackware ... 
Plus de sujets relatifs à : Ordre d'execution des commandes dans un script


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR