IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Intégration d'une fonction


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 79
    Points : 28
    Points
    28
    Par défaut Intégration d'une fonction
    Bonjour à tous,


    J'ai créé une commande 'backup' pour rsync, avec des options (-start, -add, -restore, -delete). (merci à nicolas66 & 2Eurocents )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    #! /bin/bash
     
    # declaration des variables
    export PATH=$PATH:
    INCREMENTDIR=$(date +%Y-%a-%d-%b)
    BACKUPDIR=/home/$USER
    BACKUPDIR1=/usr/lib/mysql
    EXCLUDES=exclude.rsync
    ARCHIVEROOT=/archive
    OPTIONS="-v --archive --compress --force --owner --group --links --copy-links --backup --backup-dir=$ARCHIVEROOT/$INCREMENTDIR"
    MAILADDR=
    rsync=/usr/bin/rsync
     
     
    # Fonction pour le choix des options
    function usage
    {
    	echo "usage: $0 {-start | -add | -restore | -delete | --help}" && exit $1
    }
     
    while [ $# -ne 0 ];
    do
            case $1 in
     
     
    	# Exécution de la sauvegarde
    		-start)
    			(echo "Starting RSYNC..."
    			 ($rsync $OPTIONS $BACKUPDIR $ARCHIVEROOT/$USER-$INCREMENTDIR &&
    			 $rsync $OPTIONS $BACKUPDIR1 $ARCHIVEROOT/$USER-$INCREMENTDIR)
    			 echo "RSYNC finished." 
    			) ;;
     
    	# Ajout d'un nouveau repertoire de sauvegarde
    		-add)
    			(echo -n "Quel dossier a ajouter?: ";read dossier
    			 echo "Starting add..."
    			) ;;
     
    	# Création du répertoire de sauvegarde
                    -create)
                            (#install -d $ARCHIVEROOT/$CURRENT
    			 echo "Starting create..." 
    			 mkdir -p /$ARCHIVEROOT/$USER-$INCREMENTDIR
    			 echo "Directory created."
    			) ;;
     
    	# Restauration du repertoire de sauvegarde
                    -restore)
                            (echo "Starting RSYNC restore..."
    			 cp -fR $ARCHIVEROOT/$USER-$INCREMENTDIR/ /home/$USER &&
    			 cp -fR $ARCHIVEROOT/$USER-$INCREMENTDIR /var/lib/mysql
    			 echo "Directory restored."
    			) ;;
     
    	# Suppression du repertoire de sauvegarde
                    -delete)
                            (echo -n "Quel dossier a supprimer?: ";read dossier
    			 rm -fR $dossier			
    			) ;;
     
    	# Commande help
                    --help|*)
                            usage 1 ;;
            esac
            shift
    done
    J'ai fais une fonction qui envoi un mail.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # Envoi du mail
    email()
    {
    mail -s "Erreur dans la sauvergarde" $MAILADDR << ENDOFMAIL
    La sauvegarde Automatique du serveur `hostname` ne c'est pas terminée correctement.
    Erreur :
    ENDOFMAIL
    }

    Maintenant, je voudrai intégrer cette fonction dans le script de sorte que cette fonction soit appelée dès lors que la commande backup -{start,add,restore,delete,} renvoi une erreur. Et, dans le meme mail, avoir le détail de cet erreur.

    Comment dois-je procéder?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Derrière chaque commande qui risque de générer une erreur, tu rediriges le stderr vers un fichier. A la fin de ton script, tu envoies ton mail.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    ls hehehehehe 2> fichier.err
    ls hahahahhaha 2>> fichier.err
    mail -s "Erreur dans la sauvergarde" adr.email@domaine.com < fichier.err
    ...
    En passant: les options de rsync --owner --group --links sont redondantes. Elles sont déjà incluses dans --archive. Et... prudence avec --copy-links, il me semble avoir eu, par le passé, un problème avec des links circulaires qui m'ont saturé mon répertoire de destination.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 79
    Points : 28
    Points
    28
    Par défaut
    Qu'entends tu par 'links circulaires'?


    Quand rsync s'est mal executé, un message d'erreur commencant par 'rsync error:' apparait. C'est ce message d'erreur que je voudrai envoyer dans le mail.
    Et dire:
    Si 'rsync errror:' apparait, alors envoyer un mail et diriger cettre sortie d'erreur dans ce mail.
    Est-possible?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Pour les messages d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rsync héhé haha 2>&1 | grep 'rsync error' | mail -s "Err rsync" adr@domaine.fr
    La commande s'exécute normalement. Si il y a une erreur, la sortie des erreurs, stderr, est redirigée vers la sortie standard qui elle même filtrée par grep dont le résultat est envoyé par mail.

    Pour les liens circulaires, ce n'est qu'un vague souvenir. Mais j'ai effectivement saturé un répertoire de destination avec -L. Maintenant, il est possible la cause se trouvait dans mes fichiers INCLUDE/EXCLUDE. Je n'ai pas trop cherché.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 79
    Points : 28
    Points
    28
    Par défaut
    La commande en elle meme marche très bien, se sont les sorties d'erreurs que je voulais.
    Mais je n'arrive pas à intégrer cette commande dans mon script, cad dans cette partie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # Exécution de la sauvegarde
    		-start)
    			(echo "Starting RSYNC..."
    			 ($rsync $OPTIONS $BACKUPDIR $ARCHIVEROOT/$USER-$INCREMENTDIR &&
    			  $rsync $OPTIONS $BACKUPDIR1 $ARCHIVEROOT/$USER-$INCREMENTDIR)
    			  echo "RSYNC finished." 
    			) ;;
    Merci

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/06/2015, 16h13
  2. Objet et int dans une fonction
    Par bm dans le forum Langage
    Réponses: 2
    Dernier message: 01/12/2013, 15h44
  3. Recevoir un int php en paramètre dans une fonction javascript
    Par student_php dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/10/2010, 12h40
  4. Réponses: 7
    Dernier message: 23/01/2008, 12h36
  5. [WD10] Utiliser une fonction OpenGL avec pointeur (int)
    Par Zoons dans le forum WinDev
    Réponses: 3
    Dernier message: 06/07/2006, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo