2010-03-24 84 views
2

我覺得這是很微妙的,備份 - Python的

我已經蒙山項目不同的文件夾,我想備份成一個zip/tar文件,但想避免備份文件,如pyc文件和臨時文件。

我也有我需要備份的Postgres數據庫。


將此操作作爲python腳本運行的任何提示?

此外,有沒有辦法阻止流程中的資源佔用?


幫助將非常感激。

回答

4

如果您使用的是Linux(或任何其他形式的Unix,例如MacOSX),那麼減少進程優先級的一種簡單方法 - 因此間接地,如果其他進程需要使用CPU,則是一種簡單的方法。命令nice。在Python(相同的操作系統)中,os.nice可讓您的程序「變得更好」(降低優先級& c)。

爲了備份PostgreSQL數據庫,我推薦PostgreSQL's own tools;爲了壓縮除pyc文件之外的文件夾(以及臨時文件 - 不過它是您識別的文件),Python非常適合。例如:

>>> os.chdir('/tmp/az') 
>>> f = open('/tmp/a.zip', 'wb') 
>>> z = zipfile.ZipFile(f, 'w') 
>>> for root, dirs, files in os.walk('.'): 
... for fn in files: 
...  if fn.endswith('.pyc'): continue 
...  fp = os.path.join(root, fn) 
...  z.write(fp) 
... 
>>> z.close() 
>>> f.close() 
>>> 

這呼嘯而過的所有文件中說,樹除了那些在.pyc結束(不壓縮 - 如果你想壓縮,添加第三個參數zipfile.ZIP_DEFLATEDzipfile.ZipFile調用)。幾乎不會更容易。

2

在linux上,你可以使用tar和--exclude選項。例如,要排除您.pyc文件和臨時文件(在這個例子中,.tmp

$ tar zcvf backup.tar.gz --exclude "*.tmp" --exclude "*.pyc" 

使用z選項來壓縮它爲好。

1

隨着今天的多核cpu,你可能會發現cpu不是瓶頸。現在,需要更好地共享的磁盤I/O的可能性更大。

的Linux具有ionice命令,以便控制此

ionice(1)

NAME

ionice - get/set program io scheduling class and priority 

概要

ionice [[-c class] [-n classdata ] [-t]] -p PID [PID ...] 

    ionice [-c class] [-n classdata ] [-t] COMMAND [ARG ...] 

說明
該程序設置或獲取io調度類和 程序的優先級。如果沒有參數 或只是-p,ionice將查詢當前io調度 類和該 進程的優先級。

1

使用您所做的任何備份,備份至少與恢復的重要性一樣重要。

備份源代碼的正確方法是將源文件保存在VCS(版本控制系統)中,並備份VCS存儲庫。從VCS存儲庫中排除任何自動生成的易於替換的文件(如*.pyc文件等)。我建議使用Bazaar以獲得非常高效的存儲和用戶友好性,但您的團隊可能已經擁有了他們更喜歡的VCS。

對於PostgreSQL數據庫的備份,最好使用pg_dump定期將數據庫轉儲到文本文件,對其進行壓縮並備份結果。這是因爲通過將數據庫轉儲重新播放到另一臺PostgreSQL服務器,備份可以在任何機器上恢復。

至於如何實現自動化:您最好使用Bash程序來達到這個目的,因爲它只是將一些命令連接到文件的問題,這正是shell所擅長的。