IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Utilitaires de back-up vers un site perso.


Sujet :

Python

  1. #1
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut Utilitaires de back-up vers un site perso.
    Bonjour,
    je voudrais réaliser un petit script pour créer un back-up de certains dossiers. Voilà ce que je devrais faire :
    1. Lancer mon script de façon automatique dès l'ouverture de l'OS qui sera soit Linux, soit Windaube, soit MacO$.
    2. Une fois lancé, je voudrais que toutes les cinq minutes, il parcourt un dossier connu à la recherche des fichiers récemment modifiés.
    3. Envoyer une copie des fichiers ainsi repérés sur mon site perso. Est-ce que cela marchera même si le fichier est cours d'utilisation ?

    Toute info. est la bienvenue.

  2. #2
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Citation Envoyé par rambc Voir le message
    Lancer mon script de façon automatique dès l'ouverture de l'OS qui sera soit Linux, soit Windaube, soit MacO$.
    La procédure ne sera pas la même pour chaque OS. Sous linux, tu devras rajouter un daemon à la liste de démarrage... quelque chose du côté de init.rd etc. Sous Windows, ça correspond à un service, tu auras besoin des librairies win32. Sous MacOS, je ne sais pas trop...

    Une fois lancé, je voudrais que toutes les cinq minutes, il parcourt un dossier connu à la recherche des fichiers récemment modifiés.
    Un simple thread avec un sleep devrait suffire.

    Envoyer une copie des fichiers ainsi repérés sur mon site perso. Est-ce que cela marchera même si le fichier est cours d'utilisation ?
    ftplib est certainement ce qu'il te faut. A priori, un fichier en cours d'utilisation peut encore être lu, mais il existe des systèmes de lock, et ça ça dépend des OS.

  3. #3
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par Antoine_935 Voir le message
    La procédure ne sera pas la même pour chaque OS. Sous linux, tu devras rajouter un daemon à la liste de démarrage... quelque chose du côté de init.rd etc. Sous Windows, ça correspond à un service, tu auras besoin des librairies win32. Sous MacOS, je ne sais pas trop...
    Ok va falloir que je regarde cela. Au pire, je mettrais un script Python sur les différents Bureaux. Ce n'est pas le plus important pour ce que je veux faire.

    Citation Envoyé par Antoine_935 Voir le message
    Un simple thread avec un sleep devrait suffire.
    Oui mais kézako. En fait, je n'ai jamais fait de thread même si j'en connais le principe théorique. Aurais-tu un exemple ?

    Citation Envoyé par Antoine_935 Voir le message
    ftplib est certainement ce qu'il te faut.
    Je zieuterrais cela.

    Citation Envoyé par Antoine_935 Voir le message
    A priori, un fichier en cours d'utilisation peut encore être lu, mais il existe des systèmes de lock, et ça ça dépend des OS.
    Pour cela, au pire je testerais.

  4. #4
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bon je viens de chercher via Google, et je vais partir de cela. Pour le http, cela devrait aller.

    Par contre, le thread m'effraie et je ne vois pas où commencer.

  5. #5
    Membre expérimenté Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut
    Bonjour,
    Pour ma part j'ai fait une applic qui va chercher mes mails toutes les 5 mn.
    J'utilise wx dont un wx.timer avec des éléments comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            self.timer = wx.Timer(self, 1)
            self.Bind(wx.EVT_TIMER, self.on_timer, self.timer)
            self.timer.Start(300000) #5mn en ms
     
        def on_timer(self, event):
            """Appel du timer"""

  6. #6
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Le principe des threads n'est pas compliqué, il te faudra 2 minutes pour le comprendre. La difficulté survient lorsque tu veux synchroniser les ressources (variables) auquelles plusieurs threads risquent d'accéder en même temps.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from threading import Thread
    from time import sleep
     
    class MyThread(Thread):
        def run(self):
            # Le code de cette méthode sera exécuté au démarrage du thread.
            # Le thread mourra à la fin de cette fonction
            while 1: # Déconseillé, cfr plus loin
                self.verifierDossiers()
                sleep(5 * 60) # 5 minutes
     
    t = MyThread()
    t.start() # Start démarre le thread. (ne pas mélanger avec run)
    Voila, ça c'est la base. Simple, non ?

    il est donc déconseillé d'avoir un while 1. Eh oui... comment tu arrêtes ta boucle, en coupant le thread net ? Ce n'est pas propre, et souvent déconseillé. On utilise un Event pour ce genre de choses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    >>> from threading import Thread, Event
    >>>
    >>> class MyThread(Thread):
    ...     def __init__(self):
    ...         Thread.__init__(self)
    ...         self.__stopEvent = Event()
    ...
    ...     def run(self):
    ...         while not self.__stopEvent.isSet():
    ...             print "Salut"
    ...             sleep(5)
    ...
    ...     def stop(self):
    ...         self.__stopEvent.set()
    ...
    >>> t = MyThread()
    >>> t.start()
    Salut
    >>> Salut
    Salut
    Salut
    Salut
    t.stop()
    Aussi, n'oublie pas que l'envoi par ftp prendra très certainement du temps, donc tu devras peut-être faire un calcul pour le temps de sleep. Ou alors, un autre thread pour l'envoi.
    La synchronisation se fait à l'aide de locks, reentrant locks, mutex, futex, semaphores et autres. Jette aussi un oeuil du côté des queues (module Queue)



    En réaction à alexdevl, je souhaîterais relever qu'il est dommage de s'infliger une dépendance à un module pour une chose aussi simple.
    De plus, Tkinter prend un peu de temps au chargement... donc si c'est bien pour les tâches longue-durées, ce n'est pas tjs une option possible.

  7. #7
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Merci pour ton exemple, c'est nickel. J'avais bien lu une doc sur le sujet mais l'auteur était parti sur des exemples très concrèts qui devenaient trop complexes. Avec ta proposition, on voit tout de suite le fonctionnement. Sinon pour le temps de téléchargement en fait je vais procéder comme suit :
    1. Repérage des fichiers plus anciens que le moment où le script se lance.
    2. Transfert via ftp qui "freezera" le script.
    3. Attente pendant 5 min.

    En pratique le lancement ne sera pas toutes les 5 min mais il y a aura un laps de temps de 5min entre chaque nouveau chargement.

  8. #8
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Salut,
    Si c'est juste un utilitaire de sauvegarde incrémental, je te conseillerai rsync. Il me permet de faire toutes mes sauvegardes automatiques, en ne transférant que les fichiers ayant changés, avec possibilités d'exclure des dossiers...
    Petit bémol, je sais pas si un client existe sous Windows...

  9. #9
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par dahtah Voir le message
    Si c'est juste un utilitaire de sauvegarde incrémental, je te conseillerai rsync.
    En fait il me faut quelque chose qui lorsque je bosse sur un ordi. A m'enregistre sur mon site toutes les 10 min par exemple un dossier.

    Il faut ensuite que lorsque je bosse sur un ordi. B je puisse récupérer la dernière version sur laquelle j'ai bossé, c'est à dire celle en ligne. Il faut donc récupérer ce qui est sur le site, puis ensuite recommencer sur l'ordi. B l'enregistrement auto.

    Pour finir, il me faut absolument une solution multi-os.

  10. #10
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Finalement, faute de temps pour faire mon propre outil, j'utilise DirSync Pro qui fonctionne sous Linux, Mac O$ et Windaube.

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo