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
[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
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 ?
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.
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…
[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
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…
[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]
[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…
Non parceque ce n’est pas la même condition. Oui car avec une condition négative else n’est plus nécessaire.
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…
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…
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 !
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[/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… )
Il faudrait que je me trouve un bouquin ou un site, je vais chercher.
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
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 ?