2010-12-08 15 views
1

J'ai fait un script shell qui obtient un fichier distant avec le protocole ftp, si le fichier est bien téléchargé, il lance un autre script en php avec curl.Il est une sorte de travail en ce moment, mais j'ai quelques questions pour améliorer:script shell pour télécharger le fichier distant et lancer le script et écrire autre en PHP

  • Effectuer le script attend la fin du téléchargement pour exécuter le reste du script ou pendant le temps de télécharger le script faire les instructions suivantes?
  • Je reçois le premier mail de l'instruction de début mais jamais les derniers (celui qui obtient le résultat de la boucle, et celui à la fin du script) comment se fait-il?
  • Je voudrais trouver un bon moyen d'interdire l'exécution du script plus d'une fois (si l'archive a été téléchargée) même si elle est lancée toutes les heures avec crontab?
  • Quelle est la différence entre quitter/bye/by à la fin de la connexion ftp?

C'est le script shell:

echo start of the script | mail -s "beginning of the script" [email protected] 

cd /my_rep 

HOST='domaine.com' 
PORT='21' 
USER='admin' 
PASSWD='pass' 

jour=$(date "+%Y%m%d") 
FILE="file_"$jour".txt"; 

ftp -i -n $HOST $PORT <<EOF 
quote USER $USER 
quote PASS $PASSWD 
cd firstlevel 
cd end 

get $FILE 
quit 
EOF 

if test -f $FILE 
then 
    CurlRes="$(curl "http://doma.com/myfile.php")" 

    echo debug CURL : $CurlRes | mail -s "debug" [email protected] 

else 
    echo no file : $FILE | mail -s "no file" [email protected] 
fi 

echo this is the end of the script download | mail -s "end of script download" [email protected] 

Répondre

0

Est-ce que le script attend la fin de le téléchargement pour exécuter le reste de le script ou pendant le temps de télécharger le script faites les instructions suivantes?

Si vous voulez dire "Le bloc de commande FTP sera-t-il terminé?" , la réponse est oui.

Je reçois le premier courrier d'instruction début mais jamais les derniers (celui qui obtenir le résultat de la boucle , et l'autre à la fin du script ) comment venir?

Jetez un oeil à votre code:

then 
    CurlRes="$(curl "http://doma.com/myfile.php")" 

    echo debug CURL : $CurlRes | mail -s "debug" [email protected] 

else 
    echo no file : $FILE | mail -s "no file" [email protected] 
fi 

Quel est le contenu de CurlRes $ et respectivement $ FILE? Essayez $ {CurlRes} et $ {FILE}. Je suggère également de citer des chaînes lorsque vous utilisez echo.

Il ya aussi de bonnes chances que les filtres anti-spam n'aiment pas le message, avez-vous vérifié?

Je voudrais trouver une bonne façon de le script à interdisez au être exécuté plus une fois (si l'archive a été téléchargée ) même si elle est de lancer toutes les heures avec crontab?

Cela pourrait être fait de plusieurs façons. Peut-être, en cas de succès, renvoyer le nom du fichier vers le bas de quelque chose comme successful_downloaded.txt, puis utiliser grep pour voir si le nom du fichier est dans la liste. En fonction de l'utilisation, ce fichier peut devenir assez volumineux ... donc je mettrais également en place des moyens de le faire tourner.

De l'homme (3) ftp:

bye   Terminate the FTP session with the remote server and exit ftp. 
      An end of file will also terminate the session and exit. 


quit  A synonym for bye. 

by est également synonyme de bye, pour autant que je sache.

+0

La plupart des clients FTP vous permettent de ne pas la fin de tout commande si le résultat est non ambigu. Comme une seule commande commence par 'by', il est supposé que vous vouliez dire' bye'. – Sorpigal

+0

Citer le (s) argument (s) de 'echo' ne fera pas de mal, pas plus que les accolades, mais aucune n'est nécessaire dans ce cas. Je dirais que le PO ne reçoit pas les courriels parce que le script avorte pour une raison quelconque ou qu'il y a un problème avec le doc ici. –

0

Cela devrait être évité à tout prix:

USER='admin' 
PASSWD='pass' 

Utilisez scp de ssh avec les touches (aucune invite de mot de passe requis):

Linux Journal article howto

+0

c'est un bon conseil –

Questions connexes