Page 1 of 1

[RESOLU] Probleme avec Script de sauvegarde et cron

Posted: 10 Oct 2014 16:47
by ernie
Bonjour,

Avec l'aide de mtiburs, j'ai préparé un script qui peut aider d'autres personnes pour sauvegarder.
Ceci est une alternative au module rsync du webgui et permet de stocker le rapport dans un fichier.

Voici le scirpt:
#!/bin/sh
monlog=rsync_verspool3_`date +%Y-%m-%d_%Hh%Mmn`.log
rsync -avrhstx --stats --progress /mnt/pool1/toto /mnt/pool2>./$monlog
rsync -avrhstx --stats --progress /mnt/pool1/titi /mnt/pool2>./$monlog

Ceci fonctionne avec finch car le code est bien en POSIX.2

Le rapport se trouve à la fin dans le répertoire root de nas4free. Vous adapter toto, titi et pool1 ou 2 bien sûr. C'était pour mes tests.

Quelqu'un sait il comment faire pour sauvegarder le document .log sur un chemin précis plutot que dans root ?
Merci

Re: Script de sauvegarde

Posted: 10 Oct 2014 16:57
by laster13
Bonjour

Merci à vous deux pour ce script très sympa.

Pour déplacer le fichier, peu être en utilisant la commande "mv"

genre:

Code: Select all

mv ~/loog /mnt/pool1/sauve/
à mettre en fin de script... à tester

Re: Script de sauvegarde

Posted: 10 Oct 2014 17:23
by ernie
Merci

Dans mon cas (finch) cela marche avec en fin de script

mv ~/*.log /mnt/pool2

Pool2 étant la destination.

Re: Script de sauvegarde

Posted: 10 Oct 2014 18:44
by ernie
Ne pas oublier de stopper finch car sinon les liens posent problème.
Cela donne
#!/bin/sh
finch stop
monlog=rsync_verspool3_`date +%Y-%m-%d_%Hh%Mmn`.log
rrsync -avrhstx --stats --progress /mnt/pool1/toto /mnt/pool2>./$monlog
rsync -avrhstx --stats --progress /mnt/pool1/titi /mnt/pool2>./$monlog
mv ~/$monlog /mnt/pool3/rsync
finch start

Re: Script de sauvegarde

Posted: 10 Oct 2014 18:56
by ernie
Le script ne fnctionne pas vie le cron (executer maintenant). Le journal dit:
Oct 10 18:18:05 nas4free root: Failed to execute cron job '/mnt/pool1/script/synchro'.

Par contre en le lançant dans un temrinal de fedora (equivalent putty) cela marche.

Est ce que finch ne pet pas etre stopper par nas4free via un cron ?

Re: Script de sauvegarde

Posted: 10 Oct 2014 18:59
by laster13
Juste pour voir..ça n a peu être rien a voir mais as tu essaye de le rendre exécutable

chmod +x /mnt/pool1/script/synchro

Re: Script de sauvegarde

Posted: 10 Oct 2014 19:07
by laster13
Après pour répondre a ta question tu peux également essayer de mettre en cron la commande de Finch qui est dans script de commande shutdown

Re: Script de sauvegarde

Posted: 10 Oct 2014 20:07
by ernie
Je vais essayer ce que tu proposes.

Sinon oui j ai bien fait le Chmod +x.

Mais la j ai un soucis. Mon script est lancé et j ai

Oct 10 19:10:16 nas4free kernel: pid 10269 (rsync), uid 0 inumber 31244 on /: filesystem full

et sur le terminal de fedora j'ai : /: write failed, filesystem is full

Qui se répète sans cesse.

Pourtant le pool de destination est vide.

Kazako?

Re: Script de sauvegarde

Posted: 10 Oct 2014 20:43
by ernie
Rsync s est arrêté au bout dans temps malgré ces messages.

J ai modifié le script (valable pour finch seulement):

#!/bin/sh
./mnt/pool1/finch/etc/finch/shutdown
monlog=rsync_verspool3_`date +%Y-%m-%d_%Hh%Mmn`.log
rrsync -avrhstx --stats --progress /mnt/pool1/toto /mnt/pool2>./$monlog
rsync -avrhstx --stats --progress /mnt/pool1/titi /mnt/pool2>./$monlog
cp ~/$monlog /mnt/pool1/rsync
mv ~/$monlog /mnt/pool3/rsync
finch start

Le rsync semble bien se passer, je vous dis d ici 2 heures.
J ai testé au préalable le script tel quel sans les commandes rsync et cela fonctionne.

Re: Script de sauvegarde

Posted: 11 Oct 2014 08:43
by ernie
Le script fonctionne parfaitement.

Re: Script de sauvegarde

Posted: 11 Oct 2014 09:30
by lulu80
ernie wrote:Le script fonctionne parfaitement.
bonjour ,
si j'ai bien compris se script permet la sauvegarde de finch seul ou finch ; jails et répertoire lié a finch ?

Re: Script de sauvegarde

Posted: 11 Oct 2014 13:40
by ernie
Le script fait:
- arrêter finch
- sauvegarder les chemins des commandes rsync. Dans mon cas j en ai 7 : documents, vidéos, photos, script,... Et vers 2 pools différents.
- les rsync copient leur rapport dans un fichier texte
- ce rapport est ensuite copier sur pool1
- le rapport est ensuite bouger sur pool3 ( initialement il est dans root)
- redémarrer finch

Voilà

Je viens de regarder mon rapport rsync d hier soir et il est buggue : il n est pas complet. Cependant le rsync semble avoir fonctionner car mon pool3 vierge contient toutes les données suite au rsync. Je vais retester.

Si tu veux sauvegarder tout ton nas en incluant finch, il suffit d adapter le rsync

Re: Script de sauvegarde

Posted: 11 Oct 2014 14:24
by lulu80
bonjour,
merci ernie , moi j'en était rester a la sauvegarde rsync local et cela fonctionner mais seulement en vident mes répertoire liés a finch
donc je me suis retrouver avec finch et ces jails et en réinstallant sur un pools vierge finch a redémarrer sauf les jails (owncloud et plex) qui eux ont eu
un problème de chemin ,,après comme j'ai perdu patience j'ai réinstaller tous manuellement :)
mais cela serait intéressent de pouvoir avoir finch et ces jails et de pouvoir exclure certain répertoire (pour ma part) mais n'étant pas doué pour les scripts ,
je vais continuer a suivre le sujet .

Re: Script de sauvegarde

Posted: 11 Oct 2014 16:29
by ernie
J ai corrigé le script dans les post précédents au niveau de la commande cp et mv.
Le *.log déplace tous les logs présents et cela a posé pb a nas4free et j ai du rebooter.

Le script a fonctionné une fois et lors du 2ème test via cron il ne se lance plus : les commandes rsync ne se lancent pas mais le fichier LOG est bien créé et reste vide (il a zéro octet de place). Et le fichier est bien déplacé par cp et mv.
Je continue l enquête.

Re: Script de sauvegarde

Posted: 11 Oct 2014 18:29
by ernie
J'ai désactivé les rsync dans le script et j'ai mis avant la commande cp:
echo "Sauvegarde terminée" >> ./$monlog
Le cron se lance bien et cela fonctionne.
Je reteste en réactivant les commandes rsync. Je me demande si quand le rsync ne fait rien, car pas de modifications de fichier, il n'écrit rien dans le log. En rajoutant le écho, le log est rempli même si rsync ne met rien.

Idéalement j'aimerai faire une condition : si rien en rsync, tu écris "rien n'a changé", sinon tu mets ton rapport.
Comment écrire une condition en script ?
Merci par avance

Re: Script de sauvegarde

Posted: 11 Oct 2014 19:12
by ernie
Bonsoir,

J'ai un phénomène bizard avec le script et nas4free.
Voici le script:
#!/bin/sh
./mnt/pool1/finch/etc/finch/shutdown
monlog=rsync_verspool3_`date +%Y-%m-%d_%Hh%Mmn`.log
rsync -avrhstx --stats --progress /mnt/pool1/finch/mnt/pool1/script /mnt/pool3>./$monlog
echo "Sauvegarde terminée ahah" >> ./$monlog
cp ~/$monlog /mnt/pool1/rsync
mv ~/$monlog /mnt/pool3/rsync
finch start

1) script lancé par cron à une heure fixe:
- le rapport se créée bien mais aucun rsync ne se fait pas. Je ne retrouve pas sur pool3 le script modifié, par contre le log a bien la phrase et seulement la phrase (je trace en la modifiant avant)
- pas d alerte dans le journal system

2) script lancé via le menu cron et le bouton executer maintenant
- le rsync se fait mais pas le log. Pool3 a le fichier script mis à jours, mais aucun log.
- alerte dans le journal system : root: The cron job '/mnt/pool1/script/synchro' has been executed successfully.

J'y comprends rien

Avez vous une idée ?

Re: Probleme avec Script de sauvegarde et cron

Posted: 12 Oct 2014 00:15
by mtiburs
Bonsoir,

Moi, j'ai un soucis avec un script lancé par le webgui en cron, il s'exécute que si je fais "exécuter maintenant", mais il ne veut pas se lancer à l'heure voulue (sinon, il marche en le lançant à la main)
Je n'y comprends plus rien !

C'est un script que j'ai mis au point récemment, il fait une page web et je vois bien le déroulement "des choses".

voici mes deux scripts (en fait un script maître et un script esclave):
Note: je n'aime pas mettre mes scripts car je ne suis pas un programmeur, je me "débrouille comme je peux", donc, je suis conscient qu'il peut ne pas être "comme il faut", je sais qu'il y a des puristes des scripts et je suis ouvert à toutes critiques
J'ai changé quelques noms (trucX, ...)
Les deux scripts fonctionnent et j'en suis content, me manque juste le fait de comprendre pourquoi je ne peux pas lancer le script maître en automatique par le cron du webgui.

Code: Select all

#!/bin/bash
#
# Version 2.4
# Ce script lit les modules a sauvegarder, il appelle rsync_param.sh pour faire les rsync.
# Le script rsync_param.sh peut être lancé séparément et/ou manuellement (il faut juste qu'il y ait
# en paramètre le nom du module rsync source: par exemple: rsync_param.sh nas1_logiciels
#
# partie WEB - ce qui suit ci-dessous est une fonction qui sera appelé plusieurs fois lors de 
# l'exécution du script.
# Une possible version 3 lira les noms de modules dans un fichier.

# Cette fonction génère une page web locale qui sera ensuite copié dans le serveur web (nas et/ou distant)
affweb()
{
ladate=`date`;
longueuraff=25;
tail -n $longueuraff rsync_suivi.log>./rsync_suivi_tail-$longueuraff.log;

echo "<HTML lang=\"fr\" dir=\"ltr\">">./rsync_log.html;
echo "<HEAD>">>./rsync_log.html;
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">">>./rsync_log.html;
echo "<TITLE>Gestion rsync NAS1 vers NAS2</TITLE>">>./rsync_log.html;
echo "</HEAD>">>./rsync_log.html;
echo "<BODY BGCOLOR=\"silver\">">>./rsync_log.html;
echo "<H2><u>Sauvegarde NAS1 vers NAS2</u> - suivi des opérations rsync</H2>">>./rsync_log.html;
echo "<i>Mis à jour le "$ladate"</i>">>./rsync_log.html;
echo "<HR>">>./rsync_log.html;

# on lit le fichier de log et on applique des couleurs en fonction des messages
cat ./rsync_suivi_tail-$longueuraff.log | while read lignes;
do
  chgcouleur="<font color=black>"
  testligne_oper=`echo $lignes | grep -o "des opérations ont été réalisées"`;
  if [ ${#testligne_oper} -gt 0 ]
  then
    chgcouleur="<font color=darkblue>"
  fi
  testligne_oper=`echo $lignes | grep -o "OK"`;
  if [ ${#testligne_oper} -gt 0 ]
  then
    chgcouleur="<font color=darkgreen>"
  fi
  testligne_oper=`echo $lignes | grep -o "DEFAILLANT"`;
  if [ ${#testligne_oper} -gt 0 ]
  then
    chgcouleur="<font color=red>"
  fi
  testligne_oper=`echo $lignes | grep -o "arrêt du script"`;
  if [ ${#testligne_oper} -gt 0 ]
  then
    chgcouleur="<font color=darkorange>"
  fi
  echo $chgcouleur""$lignes"</font><br>">>./rsync_log.html;
done

echo "<HR>">>./rsync_log.html;

autormarsync=`cat ./rsync_marche.txt`;
if  [ $autormarsync = "oui" ]
then
  if [ -f ./rsyncencours.status ]
  then
    echo "<font color=darkred>OPERATIONS RSYNC EN COURS</font><br>">>./rsync_log.html;
    echo "<font color=darkblue>module en cours de traitement: "$x"</font><br>">>./rsync_log.html;
  else
    echo "<i><font color=darkblue>OPERATIONS RSYNC TERMINEES</font></i><br>">>./rsync_log.html;
  fi
else
  echo "<font color=darkred>OPERATIONS RSYNC ANNULEES / BLOQUEES</font> ">>./rsync_log.html;
fi

# envoi du fichier a l'endroit voulu, sur le nas et pourquoi pas sur un site web en ftp
cp ./rsync_log.html /nas2/NAS2_web/rsync_log.html;
# lftp ftp://site:util@site.fr -e "cd /truc_web_rsync ; rsync_log.html ; quit";

echo "</BODY>">>./rsync_log.html;
echo "</HTML>">>./rsync_log.html;
}

autormarsync()
{
autormarsync=`cat ./rsync_marche.txt`;
if  [ $autormarsync = "oui" ]
then
  ./rsync_param.sh $x;
fi
}

#
# ====== RSYNC ====
# Ici, se trouve les modules rsync a sauvegarder
#
# On dit qu'on lance le programme (pour l'affichage web)
# on utilise la présence d'un fichier (mais on pourrait utiliser une variable)
touch ./rsyncencours.status;

autormarsync=`cat ./rsync_marche.txt`;

# crée une séparation dans la liste
if  [ $autormarsync = "oui" ]
then
  echo "-">>./rsync_suivi.log;
else
  echo `date`"  rsync - toutes opérations annulées ! ">>./rsync_suivi.log;
fi

# on lance l'affichage web avant de lancer un rsync
x="NAS1_systeme";
affweb;
autormarsync;
x="NAS1_web";
affweb;
autormarsync;
x="nas1_documents";
affweb;
autormarsync;
x="nas1_framabird";
affweb;
autormarsync;
x="nas1_trucX";
affweb;
autormarsync;
#x="nas1_iscsi";
#affweb;
#autormarsync;
x="nas1_logiciels";
affweb;
autormarsync;
x="nas1_partitions";
affweb;
autormarsync;
x="nas1_trucY";
affweb;
autormarsync;
x="nas1_sauvegardes_trucZ";
affweb;
autormarsync;
x="nas1_save";
affweb;
autormarsync;
#x="nas1_save_mv";
#affweb;
#autormarsync;
x="nas1_test";
affweb;
autormarsync;

# On dit qu'on a fini les opérations rsync (pour l'affichage web)
rm ./rsyncencours.status;
affweb;

et le deuxième:

Code: Select all

#!/bin/bash
#
# version 2.4
# si le script est lancé sans paramètre on stop tout !
# ici le paramètre est le nom d'un module se trouvant sur 192.168.0.201
# 
if [ $# -lt 1 ]
then
  echo "Il faut au moins un paramètre !";
  echo "rsync lancé le "$letemps" sans paramètre ! - arrêt du script">>./rsync_suivi.log;
  exit
fi
# test de la présence du serveur et de son module
testip=`ping -c 1 192.168.0.201 | grep -o "1 packets received"`;
if [ ${#testip} -gt 1 ]
  then
  echo "Le serveur est présent";
  testmod=`rsync 192.168.0.201:: | grep -o $1`;
  if [ ${#testmod} -gt 1 ]
    then
      echo "Le module "$1" est présent";
    else
      echo "module rsync "$1" est invalide ! - arrêt du script"
      # on indique dans le fichier de log que le module est invalide
      echo "module rsync "$1" est invalide ! - arrêt du script">>./rsync_suivi.log;
      exit
    fi
else
  echo "serveur absent !"
  # on n'envoie pas de message d'erreur dans le log pour ne pas surcharger le fichier de suivi
fi
#
letemps=`date +%Y-%m-%d_%Hh%Mmn%Ss`;
backupdir=/mnt/nas2_dd2k/save_backup_$1/$letemps;
etatrsync="defaut";
echo "rsync lancé le "$letemps;
echo "répertoire du backup = "$backupdir;
echo "Lancement du rsync ...";
rsync -vrh --stats --progress --inplace --size-only --del --force --exclude=".websrv_htpasswd" --backup --backup-dir=$backupdir 192.168.0.201::$1 /mnt/nas2_dd2k/save_nas1_all/$1>./rsync.log && etatrsync="ok";
finrsync=`date +%Y-%m-%d_%Hh%Mmn%Ss`;
#
# si rsync ne s'est pas déroulé correctement, on copie le log
if [ $etatrsync = "ok" ]
then
  statusrsynclog=$finrsync"  rsync de "$1" OK  (lancé le/à: "$letemps")";
  echo "... rsync exécuté correctement";
else
  echo "rsync NON OK - sauvegarde du log";
  statusrsynclog=$letemps"  rsync de "$1" !!! DEFAILLANT !!!";
  mv rsync.log /mnt/nas2_dd2k/save_nas1_log_$1_$letemps.log;
  echo "rsync défaillant - un log a été créé: /mnt/nas2_dd2k/save_nas1_log_"$1_$letemps".log";
fi
#
# si rsync a créé un répertoire de backup vide, on le supprime
# sous linux, le backup n'est crée que si c'est nécessaire
# sous freebsd, il est crée d'office ... pourquoi ??? (donc on l'enlève)
listdir=`ls $backupdir`;
if [ ${#listdir} -eq 0 ]
  then
  rm -r $backupdir;
else
  echo "rsync a créé un backup = "$backupdir;
  echo "Liste du backup de "$1;
  ls -lh $backupdir;
  statusrsynclog=$letemps"  rsync de "$1", des opérations ont été réalisées (backup)";
fi
echo $statusrsynclog>>./rsync_suivi.log;
#
Il me reste encore un peu de boulot (liste des modules en fichier, et paramétrage des adresse ip)

Re: Probleme avec Script de sauvegarde et cron

Posted: 12 Oct 2014 08:57
by laster13
Bonjour

viewtopic.php?f=70&t=1512

As tu essayé de décrire le chemin complet de rsync dans la commande?... par exemple

/usr/local/bin/rsync -avrhstx --stats --progress (options...)

au lieu de:

rsync -avrhstx --stats --progress .... (options)

comme expliquer dans le post ci dessus.

Re: Probleme avec Script de sauvegarde et cron

Posted: 12 Oct 2014 20:38
by ernie
Cela fonctionne en corrigeant selon laster13.
Ainsi nas4free avec finch on a

#!/bin/sh
./mnt/pool1/finch/etc/finch/shutdown
monlog=rsync_verspool3_`date +%Y-%m-%d_%Hh%Mmn`.log
/usr/local/bin/rsync -avrhstx --stats --progress /mnt/pool1/toto /mnt/pool2>./$monlog
/usr/local/bin/rsync -avrhstx --stats --progress /mnt/pool1/titi /mnt/pool2>./$monlog
mv ~/$monlog /mnt/pool3/rsync
finch start

Faut il faire pareil si un script utilise chmod ? Par contre je ne l'ai pas trouver dans usr/local/bin.

Re: Probleme avec Script de sauvegarde et cron

Posted: 12 Oct 2014 20:58
by laster13
Oui pourquoi pas... La commande se trouve dans

/bin/chmod