Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Invité régulier
    Inscrit en
    mai 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 30
    Points : 6
    Points
    6

    Par défaut Piloter rsync sans passer par os.

    Bonjour,

    J'ai actuellement mon script de backup (backupeur) écrit en bash et depuis quelque temps j'envisage de re-écrire. Mon script utilise rsync pour gérer la copie mais autour il y a la rétention, les notifications par mail, les logs...

    Il est composé en plusieurs plugins suivant l'action à faire.

    Avant de commencer et après quelques recherches (sans résultats) je voudrais savoir si rsync pour être totalement piloté via python ou alors via les commandes os ?

    Merci d'avance.

  2. #2
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur
    Inscrit en
    janvier 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : janvier 2009
    Messages : 561
    Points : 1 020
    Points
    1 020

    Par défaut

    Bonjour,

    Avant de commencer je n'ai pas trop compris le titre "Piloter rsync sans passer par os" et, plus loin, "... totalement piloté via python ou alors via les commandes os ?". Ca me semble contradictoire mais je me lance quand même.

    De façon générale, dans un environnement Unix/Linux, tout ce que tu fais dans un shell script peut être fait dans un script Python. Pas besoin de parcourir très longtemps les modules "plutôt" système de Python et de voir les noms des fonctions proches de ceux des fonctions C ou des commandes Unix pour "deviner" que tout ça, à la base, baignait plutôt dans un environnement Unix / Unix-like. Le passage shell script => script Python se fait donc généralement en douceur et sans casse. L' "unixien" n'est pas vraiment dépaysé.

    "Piloter" rsync - comme ça doit être le cas dans ton bash actuel - va consister à écrire/générer une ou des commandes rsync avec les options et les arguments qui vont bien et à l'exécuter soit très directement via os.system, soit via le module subprocess (Popen, call, ...) en gérant plus finement l'entrée et les sorties standards ainsi que les codes retour.

    Pour les "à côtés" (rétention (c'est quoi ?), les notifications par mails et les fichiers logs), il y a tout ce qu'il faut en Python pour faire ça et, au pire, si c'est trop fouillé ou que tu n'arrives pas à t'en débrouiller du premier coup, tu peux toujours, comme avec rsync, faire faire ça par le shell. Attention, quand même, à ce que ton script Python final ne soit pas qu'une longue liste de os.system() ...

    Personnellement, je trouve que Python est très bien adapté à ce genre de développement et est un très bon compromis entre le bash qui est très macroscopique (et - allez je le dis - parfois très lourdingue et d'une lisibilité toute relative) et le C où il faut tout faire.

    Bref : lance toi !

  3. #3
    Invité régulier
    Inscrit en
    mai 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 30
    Points : 6
    Points
    6

    Par défaut

    Salut,
    Merci de te lancer

    Avant de commencer je n'ai pas trop compris le titre "Piloter rsync sans passer par os" et, plus loin, "... totalement piloté via python ou alors via les commandes os ?". Ca me semble contradictoire mais je me lance quand même.
    En fait je voulais savoir si il y existe un module à importer dans python pour utiliser les fonctions rsync ou bien si il faut passer par os.system(rsync....) comme je le fais actuellement avec bash.

    La plus grosse raison de vouloir passer de bash à python est au niveau de la gestion de la configuration. En bash il est difficile de gérer des tableaux multiniveaux alors qu'en python y a tout ce qu'il faut. Accessoirement j'envisage de créer une interface web avec django.

    C'est surtout au niveau de rsync que je me pose des questions, pour les mails, les logs j'ai déjà fais dans d'autres scripts python donc pas de problèmes.

    La rétention c'est le nombre de jour, version de sauvegarde que tu souhaite conserver en historique.

  4. #4
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur
    Inscrit en
    janvier 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : janvier 2009
    Messages : 561
    Points : 1 020
    Points
    1 020

    Par défaut

    Concernant le choix de passer d'un shell script à Python, je pense qu'on est sur la même longueur d'onde ...

    Sinon, sur PyPI (Python Package Index) une recherche "rsync" te donne ça.

    Par contre, je n'ai rien testé.

  5. #5
    Invité régulier
    Inscrit en
    mai 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : mai 2008
    Messages : 30
    Points : 6
    Points
    6

    Par défaut

    En bon débutant je ne connaissais pas PyPi

    Je pense que je vais commencer le portage en python en lancant rsync par os.system. Ca sera la première étape.

    Merci pour toute tes réponses.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2004
    Messages : 792
    Points : 1 150
    Points
    1 150

    Par défaut

    Ne jetons pas trop vite bash aux orties. Je viens moi-même de convertir un simple script bash (dash en réalité) qui lance plusieurs requêtes http simultanées vers un serveur web: 10 lignes de code. Mon script python en fait 55. Le multiprocessing en bash est d'une simplicité enfantine, mais c'est nettement plus ardu en python pour qui n'en fait pas tous les jours.

    En ce qui concerne rsync, j'ai jeté un coup d'oeil au code de rsync.py et, sans enlever de mérite à son auteur, il lui manque la caractéristique essentielle de rsync: la synchronisation par rolling-checksum. Le script python semble se limiter à la comparaison des os.stat() pour décider si un fichier doit être sauvegardé ou pas.

    Si tu veux vraiment utiliser la puissance du rolling-checksum, regarde ce lien. Mais tu risques de te retrouver avec un code gigantesque pour remplacer une seule ligne de bash...

    "Do one thing well"
    This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together.
    http://en.wikipedia.org/wiki/Unix_philosophy
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •