Вопрос

Я чувствую, что это довольно деликатно,

У меня есть различные папки с проектами, которые я хотел бы создать в zip / tar-файл, но хотел бы избежать резервного копирования таких файлов, как pyc файлы и временные файлы.

У меня также есть база данных Postgres, которую мне нужно создать для резервного копирования.


Есть какие-нибудь советы по выполнению этой операции в виде скрипта на Python?

Кроме того, можно ли каким-либо образом остановить процесс от поглощения ресурсов в процессе?


Мы были бы очень признательны за помощь.

Это было полезно?

Решение

Если вы используете Linux (или любую другую версию Unix, например MacOSX), простой способ уменьшить приоритет процесса — и, следовательно, косвенно, потребление ресурсов ЦП, если другие процессы этого требуют, — это хороший команда.В Python (те же ОС) ОС.хорошо позволяет вашей программе «стать лучше» (уменьшить приоритет и т. д.).

Для резервного копирования базы данных PostgreSQL я рекомендую Собственные инструменты PostgreSQL;для архивирования папки, кроме файлов 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_DEFLATED к zipfile.ZipFile вызов).Вряд ли может быть проще.

Другие советы

В Linux вы можете использовать tar с --exclude вариант.например, чтобы исключить ваш .pyc файлы и временные файлы (в этом примере .tmp)

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

использовать z возможность застегнуть его.

С современными многоядерными процессорами вы можете обнаружить, что центральный процессор - это не бутылочное горлышко.Теперь гораздо больше вероятности, что дисковый ввод-вывод нуждается в более эффективном совместном использовании.

В Linux есть команда ionice, позволяющая вам управлять этим

ионице (1)

Имя

   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 ...]

Описание
Эта программа устанавливает или получает класс планирования ввода-вывода и приоритет для программы .Если не указано никаких аргументов или просто -p, ionice запросит текущее планирование ввода-вывода класс и приоритет для этого процесса.

Резервное копирование, по крайней мере, в такой же степени связано с важностью восстановление используя любую резервную копию, которую вы делаете.

Правильный способ резервного копирования исходного кода — это хранить исходные файлы в VCS (системе контроля версий), и создайте резервную копию репозитория VCS.Исключите любые автоматически создаваемые и легко заменяемые файлы (например, *.pyc файлы и т. д.) из репозитория VCS.Я рекомендую Базар для очень эффективного хранения и удобства использования, но у вашей команды, скорее всего, уже есть система VCS, которую они предпочитают.

Для резервного копирования базы данных PostgreSQL лучше всего использовать pg_dump к регулярно сбрасывать базу данных в текстовый файл, сожмите это и сохраните результат.Это связано с тем, что резервную копию можно будет восстановить на любом компьютере путем повторного воспроизведения дампа базы данных на другом сервере PostgreSQL.

Что касается того, как это автоматизировать:для этой цели лучше всего использовать программу Bash, поскольку речь идет всего лишь о подключении некоторых команд к файлам, в чем оболочка превосходна.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top