查看 plone.org 以找到一种方法来定期打包我的实例的 ZODB 我只能找到不谈论自动打包的http://plone.org/documentation/faq/how-do-i-pack-the-zodb,但只是手动启动的。
我知道我可以使用 wget 或 curl 模拟手动打包,但我想知道这是否是用于生产站点的最佳实践。
如果您使用的是 ZEO,您可以将以下内容添加到您的 Crontab 中来执行此操作:
0 1 * * 6 <path-to-buildout>/bin/zeopack
如果您不想手动执行此操作,请将其添加到您的 buildout.cfg 中,当您运行 bin/buildout 时,上面的 crontab 条目将自动添加:
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
如果您不使用 ZEO:
curl -X POST -d 'days:float=0' http://admin:admin@localhost:8080/Control_Panel/Database/main/manage_pack
我这样做(来自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
您可能想查看collective.migrator。它有一个 pack_db 配方等。
将 zeopack 用于 ZEO(请参阅其他答案),将 zodbpack 用于 RelStorage(包括在内,请参阅 RelStorage 文档)。两者都很容易设置。
对于 python/urllib 解决方案,请参阅: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
如果你更喜欢 wget。