Aide script bash
Fermé
kqkq
-
15 juin 2011 à 13:05
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 16 juin 2011 à 17:45
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 16 juin 2011 à 17:45
Bonjour,
Je souhaite créer mon premier script bash, pour çà j'aurai besoin de vos lumières, je m'explique : tous les jours, je suis obligé de vérifier le matin en arrivant au travail que chaque sauvegarde de la nuit soit bien remonté sur un serveur central et il y a à peu près 40 sauvegardes, ce sont en fait des entreprises à qui ont fait la maintenance et je souhaite donc automatiser la vérification de ces sauvegardes, c'est à dire vérifier que la sauvegarde soit à la bonne date du jour et surtout que la sauvegarde ne soit pas vide. Merci de votre soutien, si vous avez besoin de plus de renseignement, n'hésitez pas !
Je souhaite créer mon premier script bash, pour çà j'aurai besoin de vos lumières, je m'explique : tous les jours, je suis obligé de vérifier le matin en arrivant au travail que chaque sauvegarde de la nuit soit bien remonté sur un serveur central et il y a à peu près 40 sauvegardes, ce sont en fait des entreprises à qui ont fait la maintenance et je souhaite donc automatiser la vérification de ces sauvegardes, c'est à dire vérifier que la sauvegarde soit à la bonne date du jour et surtout que la sauvegarde ne soit pas vide. Merci de votre soutien, si vous avez besoin de plus de renseignement, n'hésitez pas !
A voir également:
- Aide script bash
- Script vidéo youtube - Guide
- Microsoft activation script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Bingo bash jeton gratuit - Télécharger - Divers Jeux
- Bash permission non accordée - Forum Shell
6 réponses
Bonjour,
Et quelque chose comme ça, ça te conviendrait ?
-mtime -1 : Tout fichier modifié depuis moins d'un jour
-name '*.tar' : Correspondant à ce masque
-size +0 : Non vide
Bien sûr ça ne prend pas en compte un fichier de sauvegarde remodifié manuellement quelques jours après sa génération initiale.
Et quelque chose comme ça, ça te conviendrait ?
find /home/sauvegarde -mtime -1 -name '*.tar' -size +0
-mtime -1 : Tout fichier modifié depuis moins d'un jour
-name '*.tar' : Correspondant à ce masque
-size +0 : Non vide
Bien sûr ça ne prend pas en compte un fichier de sauvegarde remodifié manuellement quelques jours après sa génération initiale.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
15 juin 2011 à 13:12
15 juin 2011 à 13:12
Salut,
Je souhaite créer mon premier script bash
Et tu as des pistes déjà ?
Je souhaite créer mon premier script bash
Et tu as des pistes déjà ?
Oui, j'ai déjà des pistes, voici ce que j'ai commencé :
J'ai commencé par çà pour vérifier que mon fichier était bien présent, mais je ne sais pas comment vérifié la date et si le fichier est vide ou non ? merci d'avance
#! /bin/bash # Vérification sauvegarde mag Date='date +'%D %H:%M'' echo $Date cd /home/sauvegarde for save_name in 'ls -l -d save*' do echo $save_name ls -l $save_name | grep .tar done
J'ai commencé par çà pour vérifier que mon fichier était bien présent, mais je ne sais pas comment vérifié la date et si le fichier est vide ou non ? merci d'avance
Merci d'avoir répondu, mais comment organisé mon script car j'ai besoin que le script me renvoie un mail en me détaillant par exemple que la sauvegarde 39 ne s'est pas bien passé car le fichier est vide est-ce possible çà ? Merci de votre aide
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
15 juin 2011 à 16:53
15 juin 2011 à 16:53
Re-
Tu mets le résultat de la commande donnée par "gm" dans une variable ou dans un fichier, puis tu testes si cette variable ou ce fichier n'est pas vide, auquel cas tu t'envoies un mail via la commande "mail" avec le fichier en pièce jointe ou l'echo de la variable dans le corps du mail...
Bien sûr il faudra que sendmail, postfix ou autre soit configuré sur ta machine afin d'envoyer ton mail ;-)
Tu mets le résultat de la commande donnée par "gm" dans une variable ou dans un fichier, puis tu testes si cette variable ou ce fichier n'est pas vide, auquel cas tu t'envoies un mail via la commande "mail" avec le fichier en pièce jointe ou l'echo de la variable dans le corps du mail...
Bien sûr il faudra que sendmail, postfix ou autre soit configuré sur ta machine afin d'envoyer ton mail ;-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Voici le script que j'ai généré, si j'ai bien compris :
Par contre, j'ai une question comment faire pour que chaque sous dossier du dossier principal "/sauvegarde" soit lu dans le script car j'ai 40 sous dossiers dans lequel doit figuré le fichier .tar qui doit être à la date du jour et non vide
Y a t-il une erreur dans ce que j'ai fais ? Merci de votre aide !
Voici le script que j'ai généré, si j'ai bien compris :
#! /bin/bash # Vérification sauvegarde mag Date='date +'%D %H:%M'' echo $Date cd /home/sauvegarde find /home/sauvegarde/save* -mtime -1 -name '*.tar' -size +0 if [ $? -eq 0 ] then echo "la sauvegarde du jour s'est bien passé" else "erreur pour la sauvegarde du jour" fi
Par contre, j'ai une question comment faire pour que chaque sous dossier du dossier principal "/sauvegarde" soit lu dans le script car j'ai 40 sous dossiers dans lequel doit figuré le fichier .tar qui doit être à la date du jour et non vide
Y a t-il une erreur dans ce que j'ai fais ? Merci de votre aide !
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
16 juin 2011 à 12:14
16 juin 2011 à 12:14
Re-
Bon pour commencer tu n'as plus besoin de la variable $Date à proprement parler sinon pour la déco ;-))
Ensuite, je n'avais pas fait attention hier, mais pour ton test il vaut mieux chercher les fichiers "*.tar" vides et non le contraire comme c'est le cas. Donc changer "-size +0" par "-size 0".
Par défaut le retour d'une commande "find" (sans erreur syntaxique) est toujours "true", quelle trouve ou non ce qu'on lui demande. Donc il ne faut pas tester son code retour mais le résultat en sortie, d'où la nécessité de rediriger la sortie soit dans un fichier soit de l'encapsuler dans une variable et de tester le contenu du fichier ou de la variable (test -z "$variable" ou test -s "fichier").
Pour la récursivité, par défaut "find" descend dans tous les répertoires et sous-répertoires à moins de l'en empêcher explicitement (-maxdepth).
Bon pour commencer tu n'as plus besoin de la variable $Date à proprement parler sinon pour la déco ;-))
Ensuite, je n'avais pas fait attention hier, mais pour ton test il vaut mieux chercher les fichiers "*.tar" vides et non le contraire comme c'est le cas. Donc changer "-size +0" par "-size 0".
find /home/sauvegarde/save* -mtime -1 -name '*.tar' -size 0
Par défaut le retour d'une commande "find" (sans erreur syntaxique) est toujours "true", quelle trouve ou non ce qu'on lui demande. Donc il ne faut pas tester son code retour mais le résultat en sortie, d'où la nécessité de rediriger la sortie soit dans un fichier soit de l'encapsuler dans une variable et de tester le contenu du fichier ou de la variable (test -z "$variable" ou test -s "fichier").
find /home/sauvegarde/save* -mtime -1 -name '*.tar' -size 0 > fichier ou VAR=$(find /home/sauvegarde/save* -mtime -1 -name '*.tar' -size 0)
Pour la récursivité, par défaut "find" descend dans tous les répertoires et sous-répertoires à moins de l'en empêcher explicitement (-maxdepth).
Il m'indique une erreur à la ligne 13 "Trop d'arguments"
Je vois pas l'erreur ?
#! /bin/bash # Vérification sauvegarde mag Date='date +'%D %H:%M'' save="find /home/sauvegarde/save* -mtime -1 -name '*.tar' -size 0" echo $Date cd /home/sauvegarde find /home/sauvegarde/ -mtime -1 -name '*.tar' -size 0 if [ -z $save ] then echo "la sauvegarde du jour s'est bien passé" else echo "erreur pour la sauvegarde du jour" fi
Je vois pas l'erreur ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
16 juin 2011 à 13:15
16 juin 2011 à 13:15
Attention, la syntaxe pour récupérer le contenu d'une commande dans une variable c'est :
VAR=$(commande ...)
et non pas :
VAR=commande
;-((
De même le test "[ -z $var ]" renvoie vrai si la chaine est vide. Donc pour ton cas il faut faire le contraire, c'est à dire, si la chaine est non vide alors la sauvegarde est bonne, sinon...
Et la négation s'obtient avec "[ ! -z $var ]"
VAR=$(commande ...)
et non pas :
VAR=commande
;-((
De même le test "[ -z $var ]" renvoie vrai si la chaine est vide. Donc pour ton cas il faut faire le contraire, c'est à dire, si la chaine est non vide alors la sauvegarde est bonne, sinon...
Et la négation s'obtient avec "[ ! -z $var ]"
#! /bin/bash # Vérification sauvegarde mag Date='date +'%D %H:%M'' save="$(find /home/sauvegarde/save* -mtime -1 -name '*.tar' -size 0)" echo $Date #cd /home/sauvegarde #find /home/sauvegarde/ -mtime -1 -name '*.tar' -size 0 if [ ! -z "${save}" ] then echo "la sauvegarde du jour s'est bien passé" else echo "erreur pour la sauvegarde du jour" fi
Le script ci-dessus te donnera tous les fichiers vides dans l'arborescence de sauvegarde. Donc toutes les sauvegardes ratées. Par contre, il ne détectera pas une sauvegarde non lancée qui ne génère même pas un fichier vide.
Du coup, il faut peut-être utiliser une autre astuce. Si tous tes répertoires de sauvegarde sont situés sous la même arborescence et qu'il faut une sauvegarde par répertoire, il suffit de compter tout cela.
Exemple :
Bon. Et maintenant tu vas nous demander comment on identifie la sauvegarde qui a planté... :)
Du coup, il faut peut-être utiliser une autre astuce. Si tous tes répertoires de sauvegarde sont situés sous la même arborescence et qu'il faut une sauvegarde par répertoire, il suffit de compter tout cela.
Exemple :
#! /bin/bash # Vérification sauvegarde mag Date='date +'%D %H:%M'' nb_rep=$(ls -ld /home/sauvegarde/save* | wc -l) nb_save=$(find /home/sauvegarde -mtime -1 -name '*.tar' -size +0 | wc -l) # du coup je remets le "+" :o) if [ $nb_rep -eq $nb_save ] then echo "la sauvegarde du jour s'est bien passée" else echo "erreur pour la sauvegarde du jour" fi
Bon. Et maintenant tu vas nous demander comment on identifie la sauvegarde qui a planté... :)
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 422
16 juin 2011 à 14:39
16 juin 2011 à 14:39
Affiche ton script s'il te plait, merci, avec la commande :
cat -n ton_script