开发者

What is the suggested way to cron-automate ZODB packs for a production Plone instance?

开发者 https://www.devze.com 2023-02-16 22:07 出处:网络
Looking at plone.org to find a way to periodically pack my instance\'s ZODB I could on开发者_运维技巧ly find http://plone.org/documentation/faq/how-do-i-pack-the-zodb that doesn\'t talk about automate

Looking at plone.org to find a way to periodically pack my instance's ZODB I could on开发者_运维技巧ly find http://plone.org/documentation/faq/how-do-i-pack-the-zodb that doesn't talk about automated packs, but just manually initiated ones.

I know I can simulate the manual pack with wget or curl, but I'd like to know if that is the best practice in use for production sites.


If you are using ZEO you can add the following to your Crontab to do this:

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

If you don't want to do it manually, add this to your buildout.cfg and the crontab entry above will be added automatically when you run 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


If you do not use ZEO:

curl -X POST -d 'days:float=0' http://admin:admin@localhost:8080/Control_Panel/Database/main/manage_pack


I do it like this (from https://raw.github.com/plock/pins/master/zeo):

[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


You may want to check out collective.migrator. It has a pack_db recipe among others.


Use zeopack for ZEO (see other answers), and zodbpack for RelStorage (included, see RelStorage docs). Both are easy to set up.


For a python/urllib solution, see: 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


wget -O/dev/null -q --post-data='days:float=10' --user=adminuser --password=password http://localhost:PORT//Control_Panel/Database/main/manage_pack

If you prefer wget.

0

精彩评论

暂无评论...
验证码 换一张
取 消