
CLI и cron
Консольный запуск — основной режим работы mxBackup. Веб-запрос ограничен таймаутами PHP и обратного прокси, поэтому копию сколько-нибудь крупного сайта надо снимать из консоли или по расписанию.
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, без письма:
15 3 * * * /usr/bin/php /path/to/site/core/components/mxbackup/cli/mxbackup.php backup --profile=prod --no-mailЕженедельная обезличенная копия в отдельный каталог:
30 4 * * 0 /usr/bin/php /path/to/site/core/components/mxbackup/cli/mxbackup.php backup --profile=dev --storage-path=/srv/backups/devКопия с отчётом на почту и записью вывода в файл:
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Разовая копия перед обновлением сайта:
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 под пользователем сайта, и проверьте, что у него есть нужные расширения.
