loulou Posté 16 Décembre 2004 Posté 16 Décembre 2004 Bonjour, Je ne suis pas sure d'être sur le bon forum, et je mexcuse par avance si c'est le cas. Je vous explique le but de mon script : Je dois récupérer chaque nuit, via une connexion FTP, un fichier .zip, qui est situé sur un serveur distant. Je dois dezipper le repertoire récupéré, dans un répertoire (à définir), sur mon serveur dédié. Une fois le répertoire dézippé, je dois exécuter un ensemble de requêtes qui intégreront les données contenues dans les fichiers du répertoire, dans une base de données qui se situe dans le www de mon serveur dédié. Si ces opérations se sont bien déroulées, je dois retourner sur le serveur distant et effacer le répertoire.zip que j'ai récupéré. Voila en gros ce que je dois faire. Ma question est : dois-je réaliser les scripts en Shell, en php ou les deux ? Je pense que la réponse est "les deux", or je ne distingue pas bien ce qui doit être fait en shell, et ce qui doit être fait en php. De plus, à part "rmdir, mkdir, cd.." et quelques autres commandes de base, je ne suis pas un AS en Shell ! Merci aux bonnes âmes qui me répondront ps: le serveur dédié fonctionne avec Redhat 7.2
Dan Posté 16 Décembre 2004 Posté 16 Décembre 2004 Salut Loulou, Le plus simple serait de tout faire en shell. Cela te permettrait d'utiliser le crontab, et tourner ce script à "heures fixes". Le shell te permet aussi d'accéder à l'arborescence complète de ton serveur... alors que php peut être limité à l'espace web (selon la config php/apache) Le php te permettrait aussi le crontab, mais de manière un peu moins naturelle. Par contre, là où tu risques de rencontrer des difficultés, c'est l'encodage du fichier .zip ! S'il n'est pas au format "gzip", tu ne pourras pas le décompresser en standard sous Redhat. Il te faudra ajouter un outil pour ce faire. Dan
loulou Posté 16 Décembre 2004 Auteur Posté 16 Décembre 2004 Salut Dan, j'ai commencé a travailler sur une solution en shell. Pour commencer, j'ai créé un "document" nommé "crontab" qui contient ceci : #voici ma crontab#execution chaque nuit a 23h30 du script suivant30 23 * * * /download.sh J'ai appelé le doc "crontab", sans extension car je ne sais pas s'il doit y en avoir une. Ensuite, j'ai créé un fichier nommé : "download.sh" qui contient ceci : #!/bin/bashftpopen jas.cn.comuser monNompass motDePasse#je vais dans le repertoire livraisoncwd livraison#si fic.txt existe alors je vais dans ../download #je prends le fichier download.zip#je retourne dans le repertoire livraison et je supprime le fichier fic.txt#je quitte le serveur distantif test -n fic.txtthen cwd ../downloadmget download.zipcwd ../livraisondelete fic.txtbye#sinon (sil n y a pas de fichier fic.txt)je quitte le serveurelsebyefi je précise que l'arborescence sur le serveur est : répértoire "download" qui contient "download.zip" répertoire "livraison" qui contient "fic.txt" Que pensez vous de ces deux fichiers ? Par ailleurs, je ne sais pas ou je dois les déposer, pouvez vous me renseigner ? En ce qui concerne le "dézippage" du répertoire téléchargé, pensez vous qu'il soit envisageable de le réaliser avec une commande php ? que je placerai dans un fichier php, et dont l'éxécution serait déclenchée par "downlaod.sh" ? Merci par avance,
kamino Posté 17 Décembre 2004 Posté 17 Décembre 2004 Bonjour, Je suis d'accord avec Dan, c'est mieux en shell, mais ce n'est qu'un avis Je te propose un petit bout de code qui je le souhaite pourra inspirer le developpement de ton shell script. C'est à base des commandes wget et ncftp. On peut aussi tout faire avec ncftp... Attention c'est juste un "template", une suggestion ! Ce n'est pas un code a mettre en production comme tel !! A toi de l'implémenter comme tu veux # Tes variables LOGIN=mylogin PASSWORD=mypassword DOMAIN=nowhere.com SOURCE=/repertoire/machine/distante TARGET=/repertoire/machine/locale FIC=download.zip # Suggestion pour télécharger ton fichier et le dézipper cd ${TARGET} wget ftp://${LOGIN}:${PASSWORD}@${DOMAIN}/${SOURCE}/${FIC} ERRCODE=$? if [ ${ERRCODE} != 0 ] then echo "ERROR while downloading !" ; exit 1 else unzip ${FIC} ; exit 0 fi # Suggestion pour effacer ton répertoire echo "rm -r ${SOURCE}"|ncftp -u ${LOGIN} -p ${PASSWORD} ${DOMAIN} Cordialement,
loulou Posté 17 Décembre 2004 Auteur Posté 17 Décembre 2004 Bonjour Kamino, Merci pour ta réponse, j'ai quelques petites questions à te poser, car je suis totalement novice : (j'ai copié le code de ton message) # Suggestion pour télécharger ton fichier et le dézipper cd ${TARGET} Que signifient les {} ? wget ftp://${LOGIN}:${PASSWORD}@${DOMAIN}/${SOURCE}/${FIC} Pourquoi y a t il : entre {LOGIN} et ${PASSWORD} et enfin, que signifie le @ entre ${PASSWORD} et ${DOMAIN} ? ERRCODE=$? ERRCODE est une variable qui sera renseignée si il y a une erreur lors du transfert des données ?, Que signifie $? ? if [ ${ERRCODE} != 0 ] then echo "ERROR while downloading !" ; exit 1 else unzip ${FIC} ; exit 0 La fonction "unzip" est reconnue par Linux ? car je n'ai rien trouvé sur internet fi Merci par avance de vos réponses, je sais, je suis nulle, mais j'essaie de m'amélliorer ! , (soyez indulgents si mes questions sont naives)
loulou Posté 17 Décembre 2004 Auteur Posté 17 Décembre 2004 ...j'ai oublié de vous poser une petite question dans mon message (encore une autre), les codes que j'ai écrit vous semblent ils corrects ? Merci Karine
Dan Posté 17 Décembre 2004 Posté 17 Décembre 2004 ...j'ai oublié de vous poser une petite question dans mon message (encore une autre), les codes que j'ai écrit vous semblent ils corrects ? Merci Karine Bonjour Karine, Malheureusement tu ne pourras pas faire tourner tes codes, vu qu'ils sont faux Il vaut mieux utiliser les codes (templates) fournis par Kamino, car ceux-ci te permettront de t'en sortir. Inutile de lancer un client ftp, alors qu'une commande wget permet de récupérer le fichier souhaité. La syntaxe qu'il donne est celle pour passer un mot de passe dans l'URL, vu que l'accès est protégé. wget ftp://nom:mot_de_passe_AT_serveur.com/repertoire/fichier permet de récupérer sur "serveur.com", le fichier "repertoire/fichier" et ceci sous l'identifiant "nom" protégé par un "mot_de_passe" . Les : et @ sont utiles pour permettre la séparation nom/mot_de_passe/serveur Dan
kamino Posté 17 Décembre 2004 Posté 17 Décembre 2004 ah, ben j'allais répondre... en ce qui concerne les paranthèses, c'est une habitude de codage en shell que je prends. echo $TOTO et echo ${TOTO} revient au même. L'interêt d'utiliser des paranthèses et surtout intéressant quand tu agrèges de manière complexe des variables pour former des chaines par exemple. ex: wget ftp://${LOGIN}:${PASSWORD}@${DOMAIN}/${SOURCE}/${FIC} bon d'accord c'est pas très complexe l'exemple... mais c'est "plus propre". Cordialement, PS: tu n'es pas nulle, il faut bien débuter un jour c'est tout
kamino Posté 17 Décembre 2004 Posté 17 Décembre 2004 Ah oui, j'oubliais: La commande unzip est reconnue par linux a partir du moment ou le package contenant unzip est installé sur ta machine. Je ne sais pas quelle distribution de linux tu as, alors pour le voir tu peux utiliser ceci si tu as une distrib du type redhat: rpm -qa|grep unzip
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant