2011-03-14 17 views
17

Guardando a plone.org per trovare un modo per impacchettare periodicamente lo ZODB della mia istanza, ho trovato solo http://plone.org/documentation/faq/how-do-i-pack-the-zodb che non parla di pacchetti automatici, ma solo di quelli avviati manualmente.Qual è il modo suggerito per automatizzare cron i pacchetti ZODB per un'istanza Plone di produzione?

So che posso simulare il pacchetto manuale con wget o curl, ma mi piacerebbe sapere se questa è la migliore pratica in uso per i siti di produzione.

risposta

25

Se si utilizza ZEO è possibile aggiungere quanto segue al vostro crontab per fare questo:

0 1 * * 6 <path-to-buildout>/bin/zeopack 

Se non si vuole fare manualmente, aggiungere questo al vostro buildout.cfg e l'entrata crontab di cui sopra saranno aggiunti automaticamente quando si esegue bin/buildout:

parts += crontab_zeopack 

# pack your ZODB each Sunday morning and hence make it smaller and faster 
[crontab_zeopack] 
recipe = z3c.recipe.usercrontab 
times = 0 1 * * 6 
command = ${buildout:directory}/bin/zeopack 
+2

Penso davvero che zeo dovrebbe essere l'impostazione predefinita: ha troppi vantaggi rispetto alle configurazioni non zeo. Grazie per il suggerimento su z3c.recipe.usercrontab. – silviot

6

Se non si utilizza ZEO:

curl -X POST -d 'days:float=0' http://admin:[email protected]:8080/Control_Panel/Database/main/manage_pack 
1

Per una soluzione/urllib python, si veda: http://www.zope.org/Documentation/Books/ZopeBook/2_6Edition/MaintainingZope.stx

#!/usr/bin/python 
import sys, urllib 
host = sys.argv[1] 
days = sys.argv[2] 
url = "%s/Control_Panel/Database/manage_pack?days:float=%s" % \ 
     (host, days) 
try: 
    f = urllib.urlopen(url).read() 
except IOError: 
    print "Cannot open URL %s, aborting" % url 
print "Successfully packed ZODB on host %s" % host 
+0

L'URL è sbagliato per le moderne installazioni di Zope, dovrebbe essere almeno .../Database/main/manage_pack? ... o avere un altro nome di database come da configurazione dell'istanza. – myroslav

5

lo faccio come questo (da https://raw.github.com/plock/pins/master/zeo): 'giorni: float = 10'

[backup] 
recipe = collective.recipe.backup 

# Backup daily 
[backups] 
recipe = z3c.recipe.usercrontab 
times = 0 0 * * * 
command = ${buildout:bin-directory}/bin/backup 

# Pack once a month 
[packups] 
recipe = z3c.recipe.usercrontab 
times = 0 0 1 * * 
command = ${buildout:bin-directory}/bin/zeopack 
2

Utilizzare zeopack per ZEO (vedere altre risposte) e zodbpack per RelStorage (incluso, vedere Documenti RelStorage). Entrambi sono facili da configurare.