![]() ![]() |
Sie sind hier: TeilnehmerInnen > mschopen's Home > ZOPE HOWTOs > Wie packe ich meine ZOPE Datenbank automatisch? Wie packe ich meine ZOPE Datenbank automatisch?Cronjob basiertes Packen der ZODB Wer auf seinem ZOPE t�glich viele �nderungen vornimmt, wird schnell merken, da� die Zope Datenbank sehr rasant wachsen kann. Folgendes kleine Script kann ganz normal im laufenden ZOPE Betrieb per Linux cronjob aufgerufen werden und packt die ZODB wieder auf eine beschauliche Gr��e zusammen. �bergibt man dem Scipt als Parameter z.B. den Wert Da das Script das Password eines Managers enth�lt, sollte es dem System User root geh�ren oder dem User, unter dem der Zope-Server l�uft. Auch nur diese User sollten das Script lesen und ausf�hren d�rfen: chmod 700 /root/bin/zpackdb
Wer seine ZODB w�chentlich oder monatlich zusammenpacken m�chte, kann das Script einfach in das Verzeichnis /ect/cron.weekly oder /etc/cron.monthly kopieren. Da in diesem Fall an das Script kein Wert �bergeben werden kann, muss der Wert f�r "days" im Script entsprechend angepasst werden. Ansonsten k�nnte ein Eintrag in der /etc/crontab z.B. so aussehen: 0 6 1,15 * * root /root/bin/zpackdb 7 oder: 0 22 * * 0 root /root/bin/zpackdb 7 um die Datenbank jeweils am 1. und 15. des Monats um 6 Uhr morgens (Beispiel 1) oder jeden Sonntag um 22 Uhr zusammenzupacken (Bespiel 2) und alle �nderungen �lter als 7 Tage zu l�schen. Weitere Einstellungsm�glichkeiten mit "man 5 crontab". eigene Anpassungen:
Hier nun das Script "/root/bin/zpackdb": #!/usr/bin/python -O import sys, urllib, os, shutil from time import * username="MANAGER" password="PASSWORD" zope="http://localhost:8080/" zope_path = "/home/zope/Zope/" backup_path = "/backup/" datafs = zope_path + str("var/Data.fs") backup = backup_path + "Data.fs." + strftime("%Y%m%d%H%M%S", localtime(time())) class NoGUI_URLopener(urllib.FancyURLopener): def __init__(self, username, password, *args): apply(urllib.FancyURLopener.__init__, (self,) + args) self.username = username self.password = password self.asked = 0 def prompt_user_passwd(self, host, realm): if self.asked: raise "Unauthorised" else: self.asked = 1 return self.username, self.password try: days = sys.argv[1] except: days = 0 try: shutil.copy(datafs, backup) except: print "Can't copy Data.fs" exit urllib._urlopener = NoGUI_URLopener(username, password) urllib.urlretrieve("%s/Control_Panel/Database/manage_pack?days:float=%s" % (zope, days)) print "###" + zope_path + "/var ###" os.system("ls -l " + zope_path + "var/") print "\n###" + backup_path + " ###" os.system("ls -l " + backup_path) Anmerkung:Die Umsetzun des cronjobs mit Xron ist nicht zu empfehlen. Es arbeit nicht zuverl�ssig und erzeugt teilweise �ber l�ngere Zeit eine erhebliche, unkontrollierte Systemlast, die zum Absturz des Zopes f�hren kann. Alternativ gibt es auf zope.org noch ein Bash Script von Fritz Mesedilla . Es wirft ein paar Fehlermeldungen aus, scheint aber zu funktionieren. �nderungen und freundliche Kritik an: schopen at medienlabor dot de Geschrieben von mschopen . Letzte �nderung 05.11.2003 11:21. |