Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
backuppc [Le 26/10/2017, 14:24]
0ol [Ajouter la machine à sauvegarder à la liste.]
backuppc [Le 19/06/2019, 18:29] (Version actuelle)
mathieuc ajout contributeur
Ligne 445: Ligne 445:
 Pour parer à cela, vous êtes invité à lire le dernier message de [[http://​forum.ubuntu-fr.org/​viewtopic.php?​pid=2988204#​p2988204|cette discussion]]</​note>​ Pour parer à cela, vous êtes invité à lire le dernier message de [[http://​forum.ubuntu-fr.org/​viewtopic.php?​pid=2988204#​p2988204|cette discussion]]</​note>​
  
-== autre exemple de fichier ​**wol.sh** ​ qui conserve  ​l'​état précédent ==+== autre exemple de fichiers ​**wol.sh** ​et **shutdown.sh** améliorés ​qui conservent ​l'​état précédent ==
  
 +Pour utiliser ces scripts, veuillez mettre le paramètre **UserCmdCheckStatus** à **1** dans la configuration,​ ou ajoutez cette ligne au fichier **/​etc/​backuppc/​config.pl**:​
 +<​file>​$Conf{UserCmdCheckStatus} = '​1';</​file>​
 +ceci permet de dire à Backuppc de prendre en compte le code d'​erreur des scripts de réveil/​extinction.
 <file bash wol.sh> <file bash wol.sh>
 #!/bin/bash #!/bin/bash
 +
 declare -i z declare -i z
 z=0 z=0
 i=0 i=0
 filename=/​var/​lib/​backuppc/​$1.laststate filename=/​var/​lib/​backuppc/​$1.laststate
 +echo "​Starting wake on lan script"​
 echo "​Filename=$filename"​ echo "​Filename=$filename"​
 cnt=$(ping -c 1 $1 | awk -F, '/​received/​{print $2*1}'​) cnt=$(ping -c 1 $1 | awk -F, '/​received/​{print $2*1}'​)
 +
 echo "Count ping to host $1 = $cnt" echo "Count ping to host $1 = $cnt"
 +
 if [ $cnt -eq 0 ]; then if [ $cnt -eq 0 ]; then
- echo $cnt > $filename +    ​echo $cnt > $filename 
- echo "Send WOL to $1 and wait minutes"​ + 
- sudo /usr/bin/etherwake -i em1 $1 +    # Time to wait for machine to boot in minutes 
- sleep ​1m +    # Use value given as argument 
- while [ $i = 0 -a $z -lt 15 +    if [ -n "​$2"​ ] && [ "​$2"​ -eq "​$2"​ ] 2>/​dev/​null;​ then 
- do +      min=$2 
- count=$(ping -c 5 $1 | awk -F, '/​received/​{print $2*1}'​) +    else 
- if [ $count -eq 0 ]; then +      echo "​ Second argument given is not a valid number! : $2" 
-       echo "$1 is down"​  +      echo "​ Using default value: 2 minutes"​ 
- else +      min=2 
- i=1 +    fi 
-       fi +    m=$min"​m"​ 
- sleep 10s + 
- z=z+1 +    ​echo "Send WOL to $1 and wait $min minutes"​ 
- done+    sudo /usr/sbin/etherwake -i enp5s0 ​$1 
 +    sleep $m 
 +    while [ $i = 0 -a $z -lt 18 
 +    do 
 + count=$(ping -c 5 $1 | awk -F, '/​received/​{print $2*1}'​) 
 + if [ $count -eq 0 ]; then 
 +    ​  ​   ​echo "$1 is down" 
 +     if [ $z -eq 17 ]; then 
 + echo "$1 not up after `expr $min + 3` minutes... exiting"​ 
 + exit 1 
 +     fi 
 + else 
 +     ​i=1 
 +     echo "$1 is up" 
 +     exit 0 
 +        ​fi 
 + sleep 10s 
 + z=z+1 
 +    done
 else else
- echo $cnt > $filename+    ​echo $cnt > $filename 
 +    exit 0
 fi</​file>​ fi</​file>​
 +__**Explication:​**__ Ce script prend deux arguments: le nom d'​hôte de la machine en premier et un nombre en deuxième (correspondant au nombre de minutes à attendre une fois que la commande etherwake est executée).
 +  * le script exécute la commande etherwake sur la machine spécifiée
 +  * puis, la boucle while teste si la machine répond au ping
 +  * après le nombre de minutes spécifiées en second argument, si la machine est en ligne, la sauvegarde est effectuée. Si la machine ne répond pas, le script attend encore 3 minutes supplémentaires
 +  * si après les 3 minutes supplémentaires la machine ne répond toujours pas, le script s'​arrête et renvoi un code d'​erreur,​ qui est ensuite interprêté par backuppc ​
  
-== et le fichier **shutdown.sh**  qui prend en compte  ​l'état précédent ==+<​note>​Cette commande :<​file>​sudo /​usr/​sbin/​etherwake -i enp5s0 $1</​file>​peut varier selon les machinesVous devrez peut-être ​l'adapter à votre configuration.\\ 
 +Ici '​enp5s0'​ est l'​interface par laquelle est envoyée le paquet magique via ethernet. $1 est la variable du nom d'​hôte (ne doit pas être modifiée). 
 +</​note>​ 
 + 
 +Ainsi pour utiliser ce script il faut ajouter ce paramètre à la configuration:​ 
 +<​file>​$Conf{DumpPreUserCmd} ​    '/​etc/​backuppc/​wol.sh $host 3';</​file>​ 
 +Cette commande envoi le paquet magique et attend ensuite 3 minutes (à adapter selon vos besoins) le réveil de la machine (si rien n'est donné en second argument, le script utilise la valeur de 2 minutes par défaut).
  
 <file bash shutdown.sh>​ <file bash shutdown.sh>​
 #!/bin/bash #!/bin/bash
-filename=/var/lib/backuppc/$1.laststate +# Backuppc user script 
-echo "Filename=$filename+ 
-declare -i laststate +if [ "​$#"​ !2 ]; then 
-read laststate < $filename +    echo 
-echo "Last State Host $1 = $laststate"​ +    echo "The BackupPC user script takes two arguments:"​ 
-if [ $(date +%k) -lt 07 -o $(date +%k ) -gt 22 ]+    echo " First: a host name ( with a corresponding ​/etc/hosts entry )" 
 +    echo " Second: - either a number corresponding to the output of the backup process (0 = failed ​/ 1 = success)"​ 
 +    echo " ​        - OR -f to force shutdown a host" 
 +    echo 
 +    exit 1 
 +fi 
 + 
 +# Array of computers, in the form: [hostname]='​Username%Password'​ 
 +# these must be Administrator'​s accounts 
 +# Modify these according to your needs 
 +declare -A names 
 +names=( 
 +    ​[hostname1]='​adminuser1%password1'​ 
 +    [hostname2]='​adminuser2%password2'​ 
 +    [hostname3]='​adminuser3%password3'​ 
 +
 + 
 +for i in "${!names[@]}"​ 
 +do 
 +    if [ $i = $1 ]; then 
 +     host_name=$i 
 +     upwd=${names[$i]} 
 +    fi 
 +done 
 + 
 +# Exit if no corresponding host name found 
 +"$host_name"​ = ""​ ] && echo "Host unknown!"​ && exit 1 
 + 
 +# To stop a pc, if -f argument given wol script wasn't used and there is no host file ) 
 +if [ "​$2"​ = "-f" ​]
 then then
- if [ $2 != 1 ] +    ​/​usr/​bin/​net rpc SHUTDOWN -f -I $host_name ​-U "​$upwd" ​-t 
- then +    exit 0 
- if [ $laststate ​ != 1 ] +fi 
- then + 
- echo "Sent SHUTDOWN to host $1" +# File to record the host status 
- /​usr/​bin/​net rpc SHUTDOWN -f -I $-U '​Administrateur%motdepasse' ​-t 30 +filename=/​var/​lib/​backuppc/​$host_name.laststate 
- else +if [ -f $filename ] 
- echo "SHUTDOWN not sent to $1 cause Host already UP before+then 
- #echo sauvegarde terminé avec succès. | smbclient ​-$1 -U '​Administrateur%motdepasse'​ +    ​echo "Filename=$filename
- fi +    ​declare ​-i laststate 
- fi+    read laststate < $filename 
 +    echo "Last State Host $host_name = $laststate"​
 else else
-        if [ $2 = 1 ] +    ​echo "Missing ​host file!
-        then +    ​exit ​1
- echo "Sauvegarde $1 OK" +
-            #echo sauvegarde terminé avec succès. | smbclient -M $1 -U '​Administrateur%motdepasse'​ +
-        fi +
-        if [ $laststate = 0 ] +
-       ​ then +
- echo "Sent SHUTDOWN to host $1+
- /​usr/​bin/​net rpc SHUTDOWN -f -I $-U '​Administrateur%motdepasse'​ -t 30 +
-        fi+
 fi fi
-echo "​Delete $filename"​ 
-unlink $filename</​file>​ 
  
 +# Actions after backup
 +if [ $2 = 1 ] # Successfull backup
 +then
 +    echo "​Backup of $host_name OK"
 +    if [ $laststate = 0 ]
 +    then
 + # Last state off, send shutdown
 + echo "Sent SHUTDOWN to host $host_name"​
 + /​usr/​bin/​net rpc SHUTDOWN -f -I $host_name -U "​$upwd"​ -t 30
 +    else
 +        # Last state : up
 +        echo "​SHUTDOWN not sent to $host_name cause Host already UP before"​
 +    fi
 +elif [ $2 = 0 ] # backup error
 +then
 +    echo "​Problem during backup of $host_name"​
 +    # Only shutdown after unsuccesfull backup during out of office hours
 +    #if [ $(date +%k) -lt 07 -o $(date +%k ) -gt 22 ]
 +    #then
 +    #/​usr/​bin/​net rpc SHUTDOWN -f -I $host_name -U "​$upwd"​ -t 30
 +    #fi
 +fi
 +
 +if [ -f $filename ]
 +then
 +    echo "​Delete $filename"​
 +    unlink $filename
 +fi</​file>​
 +
 +__**Explication:​**__ Ce script prend deux arguments: le nom d'​hôte de la machine en premier et le code de résultat du backup en deuxième (0 = échec / 1 = succès).
 +  * si le backup est réussi: si la machine était précédemment éteinte, le script exécute la commande d'​arrêt avec les paramètres nom d'​utilisateur/​ mot de passe tels qu'​enregistrés dans le script
 +  * si la machine était allumée avant, la commande d'​arrêt,​ n'est pas envoyée
 +  * si le second argument est '​-f'​ (pour forcer), la machine correspondante est arrêtée quel que soit l'​état précédent
 +
 +Ainsi pour utiliser ce script il faut ajouter ce paramètre à la configuration:​
 +<​file>​$Conf{DumpPostUserCmd} ​   = '/​etc/​backuppc/​shutdown.sh $host $xferOK';</​file>​
 +
 +<​note>​Cette commande :<​file>/​etc/​backuppc/​shutdown.sh $host -f</​file>​peut être utilisé en ligne de commande directement pour éteindre une machine en dehors de backuppc.</​note>​
  
 ==== Configuration de backuppc pour utiliser les scripts ==== ==== Configuration de backuppc pour utiliser les scripts ====
Ligne 572: Ligne 667:
  
 ----- -----
-// Contributeurs : [[:​utilisateurs:​Cyprien]],​wouldsmina,​ [[:​utilisateurs:​naoli]],​ snoopysnoopy [[:​utilisateurs:​Ool]],​ gg [[:​utilisateurs:​gfontaniere]] ​ //+// Contributeurs : [[:​utilisateurs:​Cyprien]],​wouldsmina,​ [[:​utilisateurs:​naoli]],​ snoopysnoopy [[:​utilisateurs:​Ool]],​ gg [[:​utilisateurs:​gfontaniere]], mathieuc ​ //
  • backuppc.1509020691.txt.gz
  • Dernière modification: Le 26/10/2017, 14:24
  • par 0ol