Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/09/2014, à 17:18

MisterPi

Script Rsync - Rsync.pid Permission denied

Bonjour à tous,

J'utilise rsync over SSH pour rapatrier des données d'un dossier sur mon serveur vers mon NAS à la maison. Tout fonctionnait bien jusqu'à peu.

Je lance le script via les crontab avec un utilisateur batch (qui ne fait pas parti des sudoers) mais qui est dans le groupe root.

Voilà l'erreur que je reçois :

Sortie de la commande /home/batch/rsync_v2.sh ..
TERM environment variable not set.
/home/batch/rsync_v2.sh: line 80: ./rsync.pid: Permission denied
rm: cannot remove `./rsync.pid': No such file or directory

Voici mon script :

#!/bin/bash

###########################
#   Variables à modifier  #
###########################
#Dossier source
SRC=/source
#Dossier cible
DST=/volume1/destination
#Fichier d'exclusion
EXCLUDE_FILE=/home/batch/exclude.txt
#Utilisation de la bande passante en Ko
BWLIMIT=2048
#Utiliser une connexion ssh distante
USE_SSH=true
#Utiliser la connexion SSH pour la source
USE_SSH_SRC=false
#Si utilisation de SSH, définir la chaine de connexion
SERVER_SSH=admin@monnas.com
#Repertoire contenant les logs
LOG_BASE_DIR=/home/batch/logs
#Durée de concervation des logs
OLD_DAYS=7


#################################
#  Variables à ne pas modifier  #
#################################
DATE=`date +"%Y%m%d"`
HEURE=`date +"%H%M"`
PID_FILE=./rsync.pid
LOG_RESUME_DIR=$LOG_BASE_DIR/resumes
LOG_DATE_DIR=$LOG_RESUME_DIR/$DATE
LOG_RESUME_FILE=$LOG_DATE_DIR/$DATE-$HEURE.log
LOG_PROGRESS_FILE=$LOG_BASE_DIR/progress.log
LOG_HISTORIQUE_FILE=$LOG_DATE_DIR/historique.log
RSYNC_OPTS="-ahtvrzP --bwlimit=$BWLIMIT --stats --size-only"

showEnvironment(){
        echo Environnement de travail
        echo ------------------------
        echo SRC=$SRC
        echo DST=$DST
        echo EXCLUDE_FILE=$EXCLUDE_FILE
        echo BWLIMIT=$BWLIMIT
        echo PID_FILE=$PID_FILE
        echo LOG_BASE_DIR=$LOG_BASE_DIR
        echo LOG_DATE_DIR=$LOG_DATE_DIR
        echo LOG_RESUME_FILE=$LOG_RESUME_FILE
        echo LOG_PROGRESS_FILE=$LOG_PROGRESS_FILE
        echo LOG_HISTORIQUE_FILE=$LOG_HISTORIQUE_FILE
        echo RSYNC_OPTS=$RSYNC_OPTS
        echo USE_SSG=$USE_SSH
        echo USE_SSH_SRC=$USE_SSH_SRC
        echo ------------------------
        echo
        echo Espaces disques
        echo ------------------------
        echo Source:
        df -h
        echo
        echo Destination:
        df -h
        echo
}

initArbo(){
        #Suppression des dossiers de logs les plus anciens
        find $LOG_RESUME_DIR -maxdepth 1 -type d -ctime +$OLD_DAYS  -exec rm -rfv {} \;

        #Création du dossier de logs du jour si besoin
        if [[ ! -e $LOG_DATE_DIR ]]; then
                mkdir -p $LOG_DATE_DIR
        fi


}

synchronisation(){
        echo $$ > $PID_FILE

        echo ====================================== >> $LOG_RESUME_FILE
        echo "Démarrage du script de synchronisation" >> $LOG_RESUME_FILE
        echo ====================================== >> $LOG_RESUME_FILE
        echo >> $LOG_RESUME_FILE

        showEnvironment >> $LOG_RESUME_FILE

        SOURCE=$SRC/
        DESTINATION=$DST/
        if $USE_SSH ; then

                RSYNC_OPTS="$RSYNC_OPTS -e ssh"
                if $USE_SSH_SRC ; then
                        SOURCE="$SERVER_SSH:$SOURCE"
                else
                        DESTINATION="$SERVER_SSH:$DESTINATION"
                fi
        fi





        echo CMD = rsync $RSYNC_OPTS --exclude-from "$EXCLUDE_FILE" $SOURCE $DESTINATION >> $LOG_RESUME_FILE
        rsync $RSYNC_OPTS --exclude-from "$EXCLUDE_FILE" $SOURCE $DESTINATION > $LOG_PROGRESS_FILE
        rm $PID_FILE

        echo >> $LOG_RESUME_FILE
        echo =============================== >> $LOG_RESUME_FILE
        echo "Traitement terminé" >> $LOG_RESUME_FILE
        echo =============================== >> $LOG_RESUME_FILE
}

clear

initArbo

if [ ! -s $PID_FILE ]; then
        date +"%d/%m/%y - %T : Lancement de la synchronisation" >> $LOG_HISTORIQUE_FILE
        synchronisation
else
        if kill -0 $(cat $PID_FILE) 1>/dev/null 2>&1; then
                date +"%d/%m/%y - %T : Synchronisation déjà en cours" >> $LOG_HISTORIQUE_FILE
        else
                rm -f $PID_FILE
                synchronisation
        fi
fi



J'ai fait quelque recherche mais je ne trouve pas, apparemment soit il s'agit d'un problème de version ou je dois lancer rsync via cron en root mais là ça me pose un souci.

Des idées ?

Merci.


Peace, Always ! \||/

Hors ligne

#2 Le 18/09/2014, à 17:31

Kooothor

Re : Script Rsync - Rsync.pid Permission denied

Et si tu mettais le chemin du pid file en absolu ?

Hors ligne

#3 Le 18/09/2014, à 18:15

MisterPi

Re : Script Rsync - Rsync.pid Permission denied

Merci pour la réponse mais rsync.pid est un processus je pense. Il n'y a pas de chemin absolu ? Si oui, à ton avis lequel serait-il ?


Peace, Always ! \||/

Hors ligne

#4 Le 18/09/2014, à 22:48

Kooothor

Re : Script Rsync - Rsync.pid Permission denied

Non rsync.pid est un fichier qui contient l'id du processus lancé !
Tu devrais essayer de comprendre ton script avant de le lancer !

Et tu peux le simplifier grandement, c'est du bloated code imho. Pas besoin de tout ce bazar.

@+
~ktr

Hors ligne

#5 Le 18/09/2014, à 23:09

MisterPi

Re : Script Rsync - Rsync.pid Permission denied

J'avoue que j'ai pas tout compris dans le script c'est pour cela que je demande.

J'ai par contre compris le but d'un fichier PID après recherche. Je vais voir, je vais surement passer en FTP du coup. Enfin merci.


Peace, Always ! \||/

Hors ligne

#6 Le 19/09/2014, à 00:12

Kooothor

Re : Script Rsync - Rsync.pid Permission denied

Non oublie FTP, rsync + ssh c'est très bien.
Mais commence par te faire un script qui ne fait qu'une ligne :

rsync -avz $HOME -e ssh nas:backup-home

Puis après tu peux ajouter d'autres trucs petit à petit, mais prendre un script qui fait deux pages et que tu ne comprends pas, c'est mal m'voyez.

Avec dans le fichier ~/.ssh/config
Host nas
User <l'utilisateur du nas>
Hostname 12.34.56.78

et le dossier backup-home créé sur le nas.

@+
~ktr

Hors ligne

#7 Le 19/09/2014, à 13:14

MisterPi

Re : Script Rsync - Rsync.pid Permission denied

Effectivement ça marche mieux smile J'ai même pu faire ma tâche cron et elle s'execute correctement, et tout cela en ssh ^^

Juste une autre question, voici les options que j'ai mis à rsync (j'ai repris les options du précédent script)

rsync -ahtvrzP --bwlimit=2048 --stats --size-only /source -e ssh MONNAS.com:/volume1/backup

Alors rsync me crée un dossier appelé "source" sur mon NAS dans "/volume1/backup", ce qui correspond aux options données dans la commande.

Je souhaiterais savoir comment faire pour qu'il upload les données à la racine de /volume1/backup sans crée le dossier "/source".


Peace, Always ! \||/

Hors ligne

#8 Le 19/09/2014, à 13:20

bruno

Re : Script Rsync - Rsync.pid Permission denied

Comme ceci :

rsync -ahtvrzP --bwlimit=2048 --stats --size-only /source/ -e ssh MONNAS.com:/volume1/backup/

PS : merci d'utiliser les balises [ code ] pour les commandes (icône < >).

Hors ligne

#9 Le 19/09/2014, à 13:24

MisterPi

Re : Script Rsync - Rsync.pid Permission denied

Problème résolu ! Merci Koothor et Bruno (promis j'utiliserais les balises codes la prochaine)


Peace, Always ! \||/

Hors ligne

#10 Le 19/09/2014, à 17:54

Kooothor

Re : Script Rsync - Rsync.pid Permission denied

MisterPi a écrit :

Merci Kooothor et Bruno

De rien, ça fait plaisir d'aider quelqu'un de poli. Surtout lorsqu'on revient de faire du vélo dans Paris et qu'on se fait invectiver pour oser signifier aux piétons qui traversent au feu vert que c'est mal… Mais bon je m'égare.

Hors ligne