OVH Cloud OVH Cloud

subprocess gèle avec rsync

5 réponses
Avatar
William Dode
slt,

Snapy est un petit script que j'ai écris pour faire des sauvegardes sur
un système unix, à base de rsync et cp -al (pour créer des liens durs et
faire de l'incrémental).
http://flibuste.net/libre/snapy

Pour ceux qui conaissent déjà, la dernière version utilise une
configuration légèrement différente (pour avoir plus de libertés sur les
paramètres rsync), l'utilisation de logging et un système de cron.

Je l'ai également adapté pour qu'il puisse fonctioner sous windows, en
utilisant cwrsync.

J'ai par contre de temps en temps un problème sous windows, il se bloque
sans raison apparente et aléatoirement au moment du rsync et n'en
décolle plus :-(

J'utilise subprocess de cette manière :

def sh(self,cmd):
log.debug("S cmd: " + " ".join(cmd))
p = Popen(cmd, stdout = PIPE, stderr = PIPE)
stdout, stderr = p.communicate()
if stdout:
log.debug("S ret: %s" % stdout)
if stderr:
log.error("S err: %s" % stderr)
return p.returncode

des tuyaux ? des commentaires sur le script lui-même ?

--
William Dodé - http://flibuste.net

5 réponses

Avatar
Méta-MCI
Salut zossi !

J'ai eu plusieurs blocages avec subprocess, et Python 2.4. A noter que je
n'avais pas eu ces blocages, sous Python 2.3, avec le module subprocess
"externe".

D'autres ont également signalé des problèmes du même genre.

Du coup, pour piloter des utilitaire "ligne de commande", je passe par
Popen4.

Un exemple, en fin de message, dans lequel j'envoie des commandes, les unes
derrière les autres, en récupérant le résultat.


Autre point : pour faire des sauvegardes avec synchronisation de
répertoires, j'utilise Robocopy, qui a des options intéressantes (voir :
http://www.microsoft.com/downloads/details.aspx?FamilyID467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en
ou
http://www.lacible.net/fr/?page=sources
robocopy fait partie du resource-kit de windows, gratuit, et qui contient
quelques utilitaires intéressants).

@+

Michel Claveau

-------------------------------------------------------------------

import os

def lcmd(lst=None):
a = os.popen4(lst[0])
for i in lst[1:]:
if i!='':
a[0].write(i+'rn')
a[0].flush()
return a[1].readlines()

l=[
'CMD /K',
'DIR *.c /B',
'DATE /T',
'TIME /T',
'EXIT'
]
lret = lcmd(l)
for n in lret:
print n[:-1]
Avatar
William Dode
On 06-04-2006, Méta-MCI wrote:
Salut zossi !

J'ai eu plusieurs blocages avec subprocess, et Python 2.4. A noter que je
n'avais pas eu ces blocages, sous Python 2.3, avec le module subprocess
"externe".


Est-ce que tu as pu reproduire le blocage ? Le problème c'est que je
n'arrive pas à le reproduire d'où la difficulté pour tester, hors ça
fonctionne bien plusieurs jours de suite...


D'autres ont également signalé des problèmes du même genre.

Du coup, pour piloter des utilitaire "ligne de commande", je passe par
Popen4.


Merci, je vais essayer...


Un exemple, en fin de message, dans lequel j'envoie des commandes, les unes
derrière les autres, en récupérant le résultat.


Autre point : pour faire des sauvegardes avec synchronisation de
répertoires, j'utilise Robocopy, qui a des options intéressantes (voir :
http://www.microsoft.com/downloads/details.aspx?FamilyID467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en
ou
http://www.lacible.net/fr/?page=sources
robocopy fait partie du resource-kit de windows, gratuit, et qui contient
quelques utilitaires intéressants).


Il ne me semble pas qu'on puisse copier sur une machine unix, je me
trompe ? De toutes façon, je risque d'avoir le même problème si ça vient
de subprocess...

--
William Dodé - http://flibuste.net

Avatar
Méta-MCI
Re !

Est-ce que tu as pu reproduire le blocage ?




Ben, en fait, ce n'était pas facile. Des fois ça marchait, d'autres fois,
tout bloquait. Et puis, il y a(vait) un problème avec les I/O standards : on
peut soit écrire, soit lire, soit écrire d'abord, puis lire après, mais pas
mélanger les deux.

Je comptais sur subprocess, car avec windows-2000 (c'est déjà vieux), Popen
et Python 2.3, les buffers de récupération des informations étaient très
(trop) limités (8 ko environ, de mémoire).

Mais, avec Win-XP, et Python 2.4, je récupère des sorties de plus de 10 Mo
(par exemple, un DIR complet, sur quelques centaines de milliers de
fichiers).

Donc, à partir du moment où ça a marché comme ça, je n'ai même plus regardé
subprocess.



Sinon, pour Robocopy, je ne sais pas si ça peut copier sur Unix, mais je
m'en sers avec mon NAS, qui n'est pas windows (j'utilise les UNC, comme
serveurdata). Dans ce cas, l'option /FFT permet de s'affranchir de
certains problèmes de datation des fichiers (exactement comme entre NTFS et
FAT).
Enfin, si tu as un outil qui convient, tant mieux. Je ne t'oblige pas à
utiliser Robocopy. Au contraire, même, si, en contre-partie, tu payes un
coup à boire...
Sinon, il est facile de faire un outil en Python. Mais, d'après mes tests,
on est environ deux fois plus lent.


@+

MCI



Avatar
William Dode
On 06-04-2006, Méta-MCI wrote:
Salut zossi !

J'ai eu plusieurs blocages avec subprocess, et Python 2.4. A noter que je
n'avais pas eu ces blocages, sous Python 2.3, avec le module subprocess
"externe".

D'autres ont également signalé des problèmes du même genre.

Du coup, pour piloter des utilitaire "ligne de commande", je passe par
Popen4.


Apparement Popen4 sous windows ne sait pas retourner le code de retour
de la commande appelée ?

--
William Dodé - http://flibuste.net

Avatar
William Dode
On 06-04-2006, Méta-MCI wrote:

Sinon, pour Robocopy, je ne sais pas si ça peut copier sur Unix, mais je
m'en sers avec mon NAS, qui n'est pas windows (j'utilise les UNC, comme
serveurdata). Dans ce cas, l'option /FFT permet de s'affranchir de
certains problèmes de datation des fichiers (exactement comme entre NTFS et
FAT).
Enfin, si tu as un outil qui convient, tant mieux. Je ne t'oblige pas à
utiliser Robocopy. Au contraire, même, si, en contre-partie, tu payes un
coup à boire...
Sinon, il est facile de faire un outil en Python. Mais, d'après mes tests,
on est environ deux fois plus lent.


Je doute fort d'arriver à trouver quelque chose de mieux que rsync à
travers ssh...

--
William Dodé - http://flibuste.net