[BASH] Comparer un fichier local / FTP - pour le traitement de logs

Bonjour à tous,

je débute en Shell Script et j’ai un petit problème à résoudre.

Présentation :

J’ai un script qui tourne en cron et qui me ramène avec wget des fichiers de logs de mon ftp tous les jours.

Mon besoin :

Effacer les fichiers de log sur le serveur FTP au fur et à mesure après avoir bien vérifié qu’ils ont été téléchargés en local

Mes contraintes :

  • le serveur en question plante souvent (notament le weekend) donc le cron ne s’effectue pas (comme il s’agit d’un cron qui charge un fichier de log journalier, il ne rattrape pas le retard)

  • je ne dois pas modifier le script existant (il sert pour d’autres logs que je ne dois pas effacer, et même avec une boucle de test je ne préfère pas risquer de faire une connerie irréparable)
    Ma compréhension du problème :

  • je dois créer un nouveau script qui va vérifier tous les jours si le premier script a bien ramené les logs,

  • s’il ne l’a pas fait il doit ramener tous les logs qui sont sur le FTP (et pas seulement celui du jour courant),

  • vérifier que l’opération a fonctionné,

  • et si c’est le cas, supprimer tous les logs sur le FTP.De cette manière, meme si mon serveur plante le weekend, ce script rattrapera le retard le lundi matin, et se chargera de purger le FTP (où je suis en limite de quota en ce moment !)

Pouvez vous m’aider pour ce script, et le cas échéant, me filer quelques tuyaux ? (là où je bloque actuellement c’est pour comparer l’existence des fichiers en local par rapport au FTP)

Je vous remercie d’avance. :jap:

SnowKhan.

pas grand monde qui connais le Shell Script ici, ou alors mon post vous a fait peur parce que c’est long à lire ! lol ! :sweet:

J’ai essayé de détailler et de faire au plus propre pour la présentation, mais en fin de compte ya pas grand chose de difficile je pense pour quelqu’un qui connait un tout petit peu le bash ! :wink:

Aller les purs, entre deux sujets CSS et HTML (les 98% des questions de ce genre de sujets on trouve des réponses et des exemples sur le web en général), ça vous dit pas de filer un coup de main sur un langage un peu plus pointu ? :smiley:

pour vérifier l’existence d’un certain fichier dans un répertoire (à toi de faire une boucle ou un appel récursif) tu peux procéder de la sorte :

if [ $(ls -l "/chemin/jusqu'au/fichier_recherché" | wc -l) -eq 1 ]; then
echo "le fichier existe"
fi

après j’ai besoin de plus d’informations sur :

  • La méthode d’appel du premier script : tu peux préciser la date du fichier de log à récupérer ? si oui, l’appel se fait sous quel format ? si non, tu peux oublier parce que tu ne peux pas fetcher les fichiers antérieurs à ce jour.
  • le formattage du nom des fichiers récupérés pour faire un appel itératif ?

Merci beaucoup benj de m’aider !

En ce qui concerne la méthode d’appel du premier script, je sais pas si j’ai bien compris la question, mais en faite le script récupère (avec différents paramètres car il sert pour d’autres comptes) tous les logs sur un ftp donné, à un emplacement donné (il cherche *.log en gros), et grâce au paramètre --timestamping de wget, cela empeche de ramener un log qui existe deja en local. Mon script écrit aussi dans un rapport d’activité si le téléchargement a été effectué avec succès, voila le format d’une entrée type :

le format de mes fichiers de logs (pour ceux que je souhaite traiter ici avec le nouveau script) est le suivant : "toto-YYYYMMJJ.log"

Dis moi si ces éléments sont suffisant, et le cas échéant dis moi (avec des mots simples hein, je suis encore junior en prog, et total noob en bash) ce qu’il manque :slight_smile:

Encore merci pour tout

SK.

et moi j’ai peur de n’avoir pas compris ce que tu demandais.
ton premier script fetche tous les fichiers logs sans les supprimer, c’est bien ça ?
ton deuxieme script doit vérifier si le transfert c’est bien passé ?
si ça c’est pas bien passé, il va tout refetcher ? (en appelant le premier script ?)
si ça c’est bien passé, il va supprimer tous les logs sur le ftp ?

oui voila c’est exactement ça :slight_smile:

en ce qui concerne le deuxieme script, si le transfert n’a pas eu lieu, il peut ne pas obligatoirement rappeler le premier script, vu qu’il y a une seule ligne de code avec wget, il peut le faire seul à la limite (je dirais même que je préfère les séparer)

(nb : je suppose que "fetcher" signifie "télécharger" ?)

merci !

donc au final, ton problème est de savoir si les fichiers que tu as en local correspond exactement à ceux que tu as sur le serveur ?

Il y a deux point essentiels :

  • je veux etre certain d’avoir tous les fichiers de logs en local
  • je dois effacer, si possible tous les jours, les fichiers de logs sur le serveur car je suis en limite de quota (mais pas tant que le fichier n’est pas en local bien sur)
    Je pense pouvoir me débrouiller pour lancer la commande de téléchargement, la commande de suppression, mais là où je bloque effectivement c’est pour vérifier si les logs sur le serveur sont en local ou pas encore…

un petit up, :bounce:

je suis toujours en galère :frowning:

benj m’oublie pas :sweet:

je pars bientot en vacances une semaine, et si j’ai pas terminé mon script je vais etre dans le caca :’(

ben qu’est ce que tu veux que je te dise ?
réussis-tu à récupérer la liste des fichiers de log dispo sur le serveur ?
si oui, sous quelle forme/disposition ?

nan je ne sais pas faire ça encore…

j’arrive à télécharger les fichiers logs, mais pas à dresser une liste et à la comparer avec la liste des fichiers en local

est-ce que les fichiers de log sont dans un répertoire dont on peut lister le contenu avec un navigateur web ?

non il sont au dessus du répertoire www :frowning: