plone.orgを見て、インスタンスの 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
ZEOにはzeopackを使用し(他の回答を参照)、RelStorageにはzodbpackを使用します(含まれています。RelStorageのドキュメントを参照してください)。どちらも簡単に設定できます。
collective.migratorをチェックしてみてください。とりわけ pack_db レシピがあります。
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を好むなら。