Итак, сегодня перед нами с коллегами встала задача сделать систему резервного копирования всех php файлов. Большое спасибо Axel и mr.troll за составление данной статьи.
После проб и ошибок представляем результат (протестировано на системах типа redhat):
# cd /hosting && find ./ -name *.php -exec tar -upvf /backup/phpfiles/php_files_`date +%Y-%m-%d`.tar '{}' + > /dev/null # gzip -f /backup/phpfiles/php_files_`date +%Y-%m-%d`.tar
Теперь объяснения как оно работает:
- cd /hosting && -переходим в папку, в которой будем искать пхп файлы.
- find ./ -name *.php - ищет собственно php файлы в этой папке, можно искать несколько расширений через ключ -regex, но эти регулярные выражения несколько отличаются от обычных, поэтому мы всё таки остановились на данном простом варианте.
- -exec tar ... '{}' + - в процессе выполнения, команда find запускает собой команду tar, где вместо '{}' - попадает имя файла, как вариант можно запускать через конструкцию "| xargs ".
- -upvf - ключи к команде tar, важно знать что команда tar вызывается не для всех значений сразу, поэтому нужноиспользовать ключ "u" - который добавляет новый файл в архив, а не "с" - который создаёт каждый раз новый, иначе в архив попадут всего несколько найденных файлов. Также нельзя сразу использовать ключ "z" для архивирования, т.к. tar не умеет дописывать в архивы. Ключ "p" - опционален, сохраняет права файлов.
- /backup/phpfiles/php_files_`date +%Y-%m-%d`.tar - имя файла куда сохранять бекап, с командой date - можно сохранять отдельные архивы каждый день.
- > /dev/null - для очистки стека от сообщений вывода команд, иначе все сообщения будут мусорить в логах сервера.
- gzip - архивируем для экономии места.
Запускать это проще, сохранив скрипт в sh-файл (без решёток в начале строк) и поставив права на запуск для пользователя.
Владельцы сайтов и хостингов легко могут экстраполировать данный скрипт на работу с конкретными папками пользователей, если вместо /hosting - писать папку пользователя "~". После скрипт помещаем в кронтаб пользователю и вуаля...
Для бекапа файлов по всему серверу, как написано выше засовываем это в кронтаб рута. Помните о безопасности и не оставляйте прав на чтения бекапов для посторонних пользователей!
Комментарии: