Skip to content
mxBackup
mxBackup
Резервное копирование сайта MODX Revolution 2 и 3 — архив файлов и SQL-дамп из менеджера, CLI и cron, обезличенные копии для разработки, шифрование AES-256 и безопасное восстановление.
  1. Компоненты
  2. mxBackup
  3. Эксплуатация

CLI и cron

Консольный запуск — основной режим работы mxBackup. Веб-запрос ограничен таймаутами PHP и обратного прокси, поэтому копию сколько-нибудь крупного сайта надо снимать из консоли или по расписанию.

bash
php core/components/mxbackup/cli/mxbackup.php <команда> [параметры]

Скрипт сам поднимает MODX, поэтому путь к нему указывается полностью, а рабочий каталог значения не имеет.

Команды

КомандаЧто делает
backupСоздаёт архив по выбранному профилю
dry-runПоказывает состав будущего архива, ничего не записывая
validate-configПроверяет конфигурацию, окружение, каталог хранения и доступность базы. В линии для MODX 3 та же проверка доступна кнопкой «Проверить конфигурацию» в менеджере
list-profilesПечатает доступные профили и их режимы
cleanupПрименяет правила хранения к каталогу архивов
restore-checkПроверяет архив и выдаёт код подтверждения
restoreВосстанавливает файлы и/или базу данных
helpКраткая справка (также -h, --help)

backup, dry-run и restore печатают результат в JSON — его удобно разбирать в скриптах мониторинга.

Параметры

ПараметрНазначение
--profile=NAMEПрофиль запуска; по умолчанию — mxbackup.default_profile
--storage-path=/absolute/pathКаталог архивов для этого запуска
--config=/absolute/path/mxbackup.phpОбщий PHP-файл дополнительных настроек
--format=tar.gz|zipФормат архива
--mail-to=user@example.comВключает отправку отчёта на указанный адрес
--no-mailВыключает отправку отчёта
--dry-runТот же эффект, что и команда dry-run
--verboseПечатает журнал MODX в консоль
--archive=/absolute/path/backup.zipАрхив для restore-check и restore
--scope=all|files|databaseЧто именно восстанавливать
--checksum=SHA256Ожидаемая контрольная сумма архива
--confirm=TOKENКод подтверждения из restore-check
--password-file=/absolute/path/password.txtФайл с паролем зашифрованного ZIP

Параметры, заданные в командной строке, перекрывают всё остальное — полный порядок разрешения настроек описан в разделе Системные настройки.

Пароль архива в аргументах не принимается

Аргументы командной строки видны в списке процессов и попадают в историю командной оболочки. Пароль передаётся либо файлом --password-file, либо переменной окружения MXBACKUP_ARCHIVE_PASSWORD. Если пароль не передан, а терминал интерактивный, restore-check и restore запросят его с отключённым эхом ввода.

Коды возврата

КодЗначение
0Успешно
1Ошибка выполнения: проверка конфигурации не пройдена, копия не создана, восстановление прервано
2Неизвестная команда, либо restore вызван без --confirm (предварительная проверка при этом пройдена, код подтверждения напечатан)

Для мониторинга этого достаточно: любой код, отличный от нуля, означает, что копии за этот запуск нет.

Примеры

Ежедневная production-копия в 03:15, без письма:

text
15 3 * * * /usr/bin/php /path/to/site/core/components/mxbackup/cli/mxbackup.php backup --profile=prod --no-mail

Еженедельная обезличенная копия в отдельный каталог:

text
30 4 * * 0 /usr/bin/php /path/to/site/core/components/mxbackup/cli/mxbackup.php backup --profile=dev --storage-path=/srv/backups/dev

Копия с отчётом на почту и записью вывода в файл:

text
0 2 * * * /usr/bin/php /path/to/site/core/components/mxbackup/cli/mxbackup.php backup --profile=prod --mail-to=admin@example.com >> /var/log/mxbackup.log 2>&1

Разовая копия перед обновлением сайта:

bash
php core/components/mxbackup/cli/mxbackup.php backup --profile=prod --format=zip

Рекомендации по расписанию

  • Запускайте от пользователя сайта. Копия, снятая под root, оставит архивы, которые веб-пользователь не сможет ни прочитать, ни удалить при ротации.
  • Не ставьте два задания на одно и то же время. Второй запуск упрётся в блокировку каталога и завершится ошибкой — это защита от порчи архива, а не очередь.
  • Отдельная задача cleanup не нужна: ротация выполняется в конце каждого успешного запуска. Команда пригодится, если правила хранения изменились и применить их надо немедленно. Свежие mxbackup.retention_count архивов ротация не удаляет ни при каком сроке хранения — см. Системные настройки.
  • --verbose — для разбора проблем, а не для расписания: в cron он превращает вывод в поток журнала MODX.

Диагностика

Другой backup уже выполняется — в каталоге архивов удерживается блокировка .mxbackup.lock. Это либо реально идущая копия, либо процесс, снятый по таймауту. Файл блокировки намеренно не удаляется после завершения; смотреть надо на записанные в него pid и время старта.

Каталог хранения внутри webroot запрещён — путь ведёт в публичную часть сайта. Выберите каталог вне webroot; см. Права и безопасность.

Отсутствует ext-zip / Отсутствует Phar — на сервере нет расширения для выбранного формата. Смените формат или установите недостающее расширение.

Копия завершилась со статусом «С предупреждениями» — архив создан, но что-то не попало внутрь: символическая ссылка, нечитаемый файл или таблица без поддержки согласованного снимка. Список — в отчёте запуска и в истории менеджера.

Ничего не происходит в cron, а вручную работает — почти всегда разный PHP. Укажите в задании тот же исполняемый файл PHP, что выдаёт which php под пользователем сайта, и проверьте, что у него есть нужные расширения.