Aller au contenu

Création d'un script shell ou php ?


Sujets conseillés

Posté

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 :wub:

ps: le serveur dédié fonctionne avec Redhat 7.2

Posté

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

Posté

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 suivant
30 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/bash
ftp
open jas.cn.com
user monNom
pass motDePasse

#je vais dans le repertoire livraison
cwd 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 distant

if test -n fic.txt
then cwd ../download
mget download.zip
cwd ../livraison
delete fic.txt
bye

#sinon (sil n y a pas de fichier fic.txt)je quitte le serveur
else
bye
fi

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,

Posté

Bonjour,

Je suis d'accord avec Dan, c'est mieux en shell, mais ce n'est qu'un avis :rolleyes:

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,

Posté

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

Posté

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

Posté
...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

Posté

ah, ben j'allais répondre... :P

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

Posté

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...