Lancer rsync sur un montage nfs

Salut,
J’aimerais votre avis sur mon script.
A priori ça fonctionne, mais comme je suis une bulle en la matière (c’est mon premier)…

Le but : lancer une sauvegarde sur un montage nfs. Le client teste si le serveur nfs est en ligne avec un ping, si non, il stop. Si oui, il lance la commande de mount. Ensuite le script vérifie que le montage est opérationnel, si oui, il lance rsync. J’ai préféré faire un deuxième teste sur le montage, au cas ou la machine soit en ligne, mais nfs-kernel-server indisponible.

Comme je suis une bille, j’ai fait un script pour chaque jour de la semaine, il doit y avoir moyen de faire plus simple…

[code]#!/bin/bash

sauvegarde du lundi

if [ “$(ping -c 3 192.168.0.2 | grep ‘0 received’)” ]
then
: ; exit 1
else

    if df | grep -q 'sidlol.isalo.org:/media/sdb5/soslol'
    then :
    else
            mount -t nfs sidlol.isalo.org:/media/sdb5/soslol /mnt/sidlol/sos
    fi

fi

if [ -f /mnt/sidlol/sos/.test ]; then
echo "Disque monté, lancement de rsync:"
rsync -rltgoDv --ignore-errors --force --stats --progress /mnt/sos/ --exclude-from=/root/ExclusionRsync /mnt/sidlol/sos/lundi/
read
exit

else
echo "Non monté, sortie!"
fi
[/code]

Merci d’avance.

[quote=“lol”]Salut,
J’aimerais votre avis sur mon script.
A priori ça fonctionne, mais comme je suis une bulle en la matière (c’est mon premier)…

Le but : lancer une sauvegarde sur un montage nfs. Le client teste si le serveur nfs est en ligne avec un ping, si non, il stop. Si oui, il lance la commande de mount. Ensuite le script vérifie que le montage est opérationnel, si oui, il lance rsync. J’ai préféré faire un deuxième teste sur le montage, au cas ou la machine soit en ligne, mais nfs-kernel-server indisponible.

Comme je suis une bille, j’ai fait un script pour chaque jour de la semaine, il doit y avoir moyen de faire plus simple…

[quote]#!/bin/bash

sauvegarde du lundi

if [ “$(ping -c 3 192.168.0.2 | grep ‘0 received’)” ]
then
: ; exit 1
else

    if df | grep -q 'sidlol.isalo.org:/media/sdb5/soslol'
    then :
    [color=#FF0000]else[/color]
            mount -t nfs sidlol.isalo.org:/media/sdb5/soslol /mnt/sidlol/sos
    fi

fi

if [ -f /mnt/sidlol/sos/.test ]; then
echo "Disque monté, lancement de rsync:"
rsync -rltgoDv --ignore-errors --force --stats --progress /mnt/sos/ --exclude-from=/root/ExclusionRsync /mnt/sidlol/sos/lundi/
read
exit

else
echo "Non monté, sortie!"
fi
[/quote]

Merci d’avance.[/quote]
Ce “else” n’est pas de trop :question:

EDIT :
à moins que ton ‘then’ ait un rapport avec ‘:’, auquel je n’avais pas prêté attention ?
Dans ce cas, je pense que tu veux dire réponse vide ?
Je ne connais pas bash mais ça ne serait pas “” pour vide ?

c’est peut-être tout bête… mais dans ton script, tu fais un mount avant ton rsync si le serveur visé répond, puis lance le rsync si le mount est correct (via ton test sur fichier)
mais pas de umount en fin de traitement ?

[quote=“ricardo”]…
Ce “else” n’est pas de trop :question:

EDIT :
à moins que ton ‘then’ ait un rapport avec ‘:’, auquel je n’avais pas prêté attention ?
Dans ce cas, je pense que tu veux dire réponse vide ?
Je ne connais pas bash mais ça ne serait pas “” pour vide ?[/quote]Effectivement le else est indispensable à la seconde condition, je viens de tester.
Les deux-point c’est pour “rien à faire”… Si j’ai compris ?

[quote=“Mitsu”]c’est peut-être tout bête… mais dans ton script, tu fais un mount avant ton rsync si le serveur visé répond, puis lance le rsync si le mount est correct (via ton test sur fichier)
mais pas de umount en fin de traitement ?[/quote]
Oui, merci j’avais oublié le démontage, c’est plus propre…

Donc à priori, vous n’avez rien remarqué d’atroce… Tant mieux.
Il faut maintenant que je trouve le moyen d’ajouter le jour de la semaine dans le chemin de la sauvegarde.
Je suppose qu’il faut extraire la date (en anglais) traduire en français, et l’injecter dans le chemin de la sauvegarde…
Je vais “googliser” la-dessus.

Merci à vous

Bonjour,

Pour le jour de la semaine tu peux utiliser cette commande : date +%A

Utilise la négation pour eviter d’avoir des actions qui ne font rien.

Tu peux remplacer ceci if df | grep -q 'sidlol.isalo.org:/media/sdb5/soslol' then : else mount -t nfs sidlol.isalo.org:/media/sdb5/soslol /mnt/sidlol/sos fi

par

if ! df | grep -q 'sidlol.isalo.org:/media/sdb5/soslol' then mount -t nfs sidlol.isalo.org:/media/sdb5/soslol /mnt/sidlol/sos fi

Je ne vois pas l’interet de ceci : ; exit 1, tu peux faire directement un exit 1.

Quel est l’interet de ton read après la commande rsync ?

Salut,
Merci d’avoir pris le temps de regarder ma croute…

[quote=“micky979”]Bonjour,

Pour le jour de la semaine tu peux utiliser cette commande : date +%A[/quote]
Je venais de le trouver sur le Web…
Tu sais comment je peux l’intégrer dans le chemin de la sauvegarde ? ça m’éviterais de faire un script par jour de la semaine… :mrgreen:

[quote=“micky979”]Utilise la négation pour eviter d’avoir des actions qui ne font rien.

Tu peux remplacer ceci if df | grep -q 'sidlol.isalo.org:/media/sdb5/soslol' then : else mount -t nfs sidlol.isalo.org:/media/sdb5/soslol /mnt/sidlol/sos fi

par

if ! df | grep -q 'sidlol.isalo.org:/media/sdb5/soslol' then mount -t nfs sidlol.isalo.org:/media/sdb5/soslol /mnt/sidlol/sos fi

Je ne vois pas l’interet de ceci : ; exit 1, tu peux faire directement un exit 1.

Quel est l’interet de ton read après la commande rsync ?[/quote]

Merci pour l’astuce, c’est bien plus propre :smiley:
Le read ? Je viens d’essayer sans. Effectivement ça ne sert à rien… Je pensais que ça me laissait la main pour lire le résultat de la commande… De toute façon il faut plutôt que je prévoie l’envoie d’un mail avec la sortie de rsync…

Bonjour,

Tu peux remplacer ta ligne rsync par ceci :

[quote=“micky979”]Bonjour,

Tu peux remplacer ta ligne rsync par ceci :

Super, c’est exactement ce que je cherche à faire! :smiley:
Merci beaucoup. En “prod” dés demain !

[quote]Tu peux remplacer ceci
Code:
if df | grep -q 'sidlol.isalo.org:/media/sdb5/soslol’
then :
else
mount -t nfs sidlol.isalo.org:/media/sdb5/soslol /mnt/sidlol/sos
fi

par

Code:
if ! df | grep -q 'sidlol.isalo.org:/media/sdb5/soslol’
then
mount -t nfs sidlol.isalo.org:/media/sdb5/soslol /mnt/sidlol/sos
fi[/quote]

Ma première impression était donc bien la bonne.

[quote=“ricardo”][quote]Tu peux remplacer ceci
Code:
if df | grep -q ‘sidlol.isalo.org:/media/sdb5/soslol’
then :
else
mount -t nfs sidlol.isalo.org:/media/sdb5/soslol /mnt/sidlol/sos
fi

par

Code:
if ! df | grep -q ‘sidlol.isalo.org:/media/sdb5/soslol’
then
mount -t nfs sidlol.isalo.org:/media/sdb5/soslol /mnt/sidlol/sos
fi[/quote]

Ma première impression était donc bien la bonne.[/quote]
Oui, et non… :wink:
Non parceque ce n’est pas la même condition. Oui car avec une condition négative else n’est plus nécessaire.
:006

Bon,
Y’a un os…

Quand je lance avec la ligne de commande (en tant que root) il sauvegarde bien dans "lundi"
Quand je lance la tâche cron, il sauvegarde dans “Monday”… Le c… Et c’est bien en root aussi…

Une idée régler ça ?

Bonjour,

Tente de rajouter ceci au debut de ton script : . /etc/default/locale

ou tu rajoute au debut de ton script LANG=fr_FR.UTF-8

Si tu n’est pas sur de la valeur tu peux controler via cette commande echo $LANG

Re,
Merci d’être encore là pour moi :smiley:

Ne donne rien… (il faut bien un point et un espace ? - enfin ça marche pas sans…)

Bizare, parceque sous root j’ai bien :

lol:~# date +%A lundi

Enervant ce truc.
Il doit y avoir une solution, je ne vois pas laquelle (enfin je comprend que c’est un problème de locales)…
Au pire je mettrais les jours en anglais. Je sais c’est pas très combatif… :blush:

[quote=“micky979”]Bonjour,

Tente de rajouter ceci au debut de ton script : . /etc/default/locale

ou tu rajoute au debut de ton script LANG=fr_FR.UTF-8

Si tu n’est pas sur de la valeur tu peux controler via cette commande echo $LANG[/quote]

Hum… Je n’avais vu que le début de ton message… Tu l’as édité ?

En tout cas le LANG=fr_FR.UTF-8 est parfait ! Merci infiniment de ton aide.

Re,
Parlé trop vite… ça m’apprendra. (j’ai lancé depuis la ligne de commande)
Toujours le même problème avec cron…

Re,
J’ai pensé faire le malin avec ça en début de code…

LANG=fr_FR.UTF-8 LC_CTYPE="fr_FR.UTF-8" LC_NUMERIC="fr_FR.UTF-8" LC_TIME="fr_FR.UTF-8" LC_COLLATE="fr_FR.UTF-8" LC_MONETARY="fr_FR.UTF-8" LC_MESSAGES="fr_FR.UTF-8" LC_PAPER="fr_FR.UTF-8" LC_NAME="fr_FR.UTF-8" LC_ADDRESS="fr_FR.UTF-8" LC_TELEPHONE="fr_FR.UTF-8" LC_MEASUREMENT="fr_FR.UTF-8" LC_IDENTIFICATION="fr_FR.UTF-8"
Pas mieux; avec ou sans guillemets, il persiste sur “Monday” le bougre !

Bonjour,

Il faut ensuite que tu fasse un export

export LANG juste après le LANG=…

Il est normal que la commande . /etc/default/locale ne t’affiche rien, il ne fait que charger une variables.

L’avantage de passer par le fichier /etc/default/locale, c’est que en cas de modification de tes locales, tu n’auras rien a modifier dans tes scripts car ils vont s’appuyer sur un fichier generique.

Si tu veux utiliser cette methode dans ton script tu ajoute ceci :

. /etc/default/locale export LANG

Salut,

[quote=“micky979”]…

. /etc/default/locale export LANG[/quote]
Cette fois-ci est la bonne.
Merci de ta patience, je n’au aucune notion en script, et c’est pas évident (du basic il y a presque 30 ans… :mrgreen: )
Il faudrait que je me trouve un bouquin ou un site, je vais chercher.
:006

Re,
Au cas ou ça serve à quelqu’un… voici le script :
Sauvegarde quotidienne, une sauvegarde différentielle par jour de la semaine (Je pèche par excès de prudence, mais j’ai de la place, et j’ai bien galéré au dernier crash de disque…) - Au total 7 sauvegardes, ça laisse de la marge :mrgreen:

[code]#!/bin/bash

sauvegarde différentielle journalière

. /etc/default/locale
export LANG
rm rsync_$(date +%A)-result.log
LOGFILE="/root/rsync_$(date +%A)-result.log"

if [ “$(ping -c 3 192.168.0.2 | grep ‘0 received’)” ]
then
exit 1
else

if ! df | grep -q ‘sidlol.isalo.org:/media/sdb5/soslol’
then
mount -t nfs sidlol.isalo.org:/media/sdb5/soslol /mnt/sidlol/sos
fi

fi

if [ -f /mnt/sidlol/sos/.test ]; then
rsync -rltgoDvh --ignore-errors --force --stats --progress /mnt/sos/ --exclude-from=/root/ExclusionRsync /mnt/sidlol/sos/$(date +%A)/ 2>&1 >> ${LOGFILE}
mailx vmail < $LOGFILE ;
umount sidlol.isalo.org:/media/sdb5/soslol
exit

else
echo “No, not mounted!”
fi
[/code]

Il manque encore l’envoie d’un mail au cas ou la sauvegarde n’a pas eu lieu. Ce sera pour plus tard…

On a un sujet qui recences les scripts que d’autres utilisateurs ont fait dans Trucs & astuces je pense que ça pourrait être bien de l’envoyer le copier là bas, non ?