Skip to content

Команды обновлений (update)

Стандартные команды Битрикс для обновления системы: языковые пакеты, модули и версии.

update:languages

Обновляет языковые файлы для указанных языков.

Синтаксис

bash
php bitrix.php update:languages [опции]

Опции

  • --languages=<коды> или -l - список кодов языков через запятую

Примеры использования

bash
# Обновление всех языковых файлов
php bitrix.php update:languages

# Обновление конкретных языков
php bitrix.php update:languages -l ru
php bitrix.php update:languages --languages=ru,en,de

# С подробным выводом
php bitrix.php update:languages -v

update:modules

Обновляет модули системы.

Синтаксис

bash
php bitrix.php update:modules [опции]

Опции

  • --modules=<список> или -m - список модулей через запятую
  • --import=<файл> или -i - JSON-файл с версиями модулей (экспертный режим)

Примеры использования

bash
# Обновление всех модулей
php bitrix.php update:modules

# Обновление конкретных модулей
php bitrix.php update:modules -m main
php bitrix.php update:modules --modules=main,iblock,catalog

# Импорт версий модулей из JSON (экспертный режим)
php bitrix.php update:modules -i updates.json
php bitrix.php update:modules --import=updates.json

# С подробным выводом
php bitrix.php update:modules -v

Формат JSON для импорта

json
{
  "main": "23.0.0",
  "iblock": "21.0.0",
  "catalog": "23.5.0",
  "sale": "23.0.0"
}

update:versions

Понижает версии модулей в базе данных согласно файлу JSON (используется для отката).

Синтаксис

bash
php bitrix.php update:versions <versions>

Аргументы

  • versions - путь к JSON-файлу с версиями модулей

Примеры использования

bash
# Обновление версий из файла
php bitrix.php update:versions versions.json

# Откат к предыдущим версиям
php bitrix.php update:versions /backup/versions_before_update.json

Формат JSON-файла

json
{
  "main": "22.0.0",
  "iblock": "20.5.0",
  "catalog": "22.0.0"
}

Использование

Регулярное обновление системы

bash
#!/bin/bash
# Еженедельное обновление системы

cd /var/www/bitrix

LOG_FILE="/var/log/bitrix-updates-$(date +%Y%m%d).log"

{
    echo "=== Начало обновления: $(date) ==="
    
    # Создать резервную копию
    echo "Создание резервной копии..."
    php bitrix.php backup:create --name="before_update_$(date +%Y%m%d)"
    
    # Обновить языковые файлы
    echo "Обновление языковых файлов..."
    php bitrix.php update:languages
    
    # Обновить модули
    echo "Обновление модулей..."
    php bitrix.php update:modules
    
    # Очистить кеш
    echo "Очистка кеша..."
    php bitrix.php cache:clear
    
    echo "=== Завершено: $(date) ==="
    
} >> "$LOG_FILE" 2>&1

# Отправить отчет
mail -s "Bitrix Update Report" admin@example.com < "$LOG_FILE"

Безопасное обновление с проверками

bash
#!/bin/bash
# Обновление с проверками и откатом при ошибках

cd /var/www/bitrix

# Сохранить текущие версии модулей
echo "Сохранение текущих версий..."
php -r '
$conn = Bitrix\Main\Application::getConnection();
$result = $conn->query("SELECT ID, VERSION FROM b_module");
$versions = [];
while ($row = $result->fetch()) {
    $versions[$row["ID"]] = $row["VERSION"];
}
file_put_contents("/tmp/versions_before.json", json_encode($versions, JSON_PRETTY_PRINT));
'

# Создать бэкап
php bitrix.php backup:create --name="before_update"

# Обновить модули
if php bitrix.php update:modules; then
    echo "✓ Модули обновлены успешно"
    
    # Проверить работоспособность
    if curl -s -o /dev/null -w "%{http_code}" http://localhost | grep -q "200"; then
        echo "✓ Сайт работает"
    else
        echo "✗ Сайт недоступен, откат изменений"
        php bitrix.php update:versions /tmp/versions_before.json
        php bitrix.php cache:clear
    fi
else
    echo "✗ Ошибка обновления модулей"
    exit 1
fi

Обновление конкретных модулей

bash
#!/bin/bash
# Обновление только критичных модулей

CRITICAL_MODULES=("main" "iblock" "catalog" "sale")

cd /var/www/bitrix

for module in "${CRITICAL_MODULES[@]}"; do
    echo "Обновление модуля: $module"
    
    if php bitrix.php update:modules --modules="$module"; then
        echo "✓ $module обновлен"
    else
        echo "✗ Ошибка обновления $module"
    fi
done

Продвинутые сценарии

Staged обновления (поэтапные)

bash
#!/bin/bash
# Поэтапное обновление с проверками между этапами

cd /var/www/bitrix

STAGES=(
    "main"
    "iblock,catalog"
    "sale,crm"
)

for stage in "${STAGES[@]}"; do
    echo "=== Этап: $stage ==="
    
    # Сохранить версии
    php -r "
    \$conn = Bitrix\Main\Application::getConnection();
    \$result = \$conn->query('SELECT ID, VERSION FROM b_module');
    \$versions = [];
    while (\$row = \$result->fetch()) {
        \$versions[\$row['ID']] = \$row['VERSION'];
    }
    file_put_contents('/tmp/versions_stage_$stage.json', json_encode(\$versions));
    "
    
    # Обновить
    if php bitrix.php update:modules --modules="$stage"; then
        echo "✓ Этап $stage завершен"
        
        # Проверить сайт
        sleep 5
        if ! curl -s http://localhost > /dev/null; then
            echo "✗ Сайт недоступен, откат этапа"
            php bitrix.php update:versions "/tmp/versions_stage_$stage.json"
            exit 1
        fi
    else
        echo "✗ Ошибка на этапе $stage"
        exit 1
    fi
    
    echo "Пауза 30 секунд перед следующим этапом..."
    sleep 30
done

echo "Все этапы завершены успешно"

Синхронизация версий между окружениями

bash
#!/bin/bash
# Экспорт версий с продакшена для dev/staging

ENV="${1:-production}"

cd /var/www/bitrix

# Экспортировать текущие версии
php -r '
$conn = Bitrix\Main\Application::getConnection();
$result = $conn->query("SELECT ID, VERSION FROM b_module");
$versions = [];
while ($row = $result->fetch()) {
    $versions[$row["ID"]] = $row["VERSION"];
}
file_put_contents("/tmp/versions_'$ENV'.json", json_encode($versions, JSON_PRETTY_PRINT));
'

echo "Версии модулей экспортированы: /tmp/versions_$ENV.json"

# Скопировать на другие окружения
if [ "$ENV" = "production" ]; then
    scp /tmp/versions_production.json staging:/tmp/
    scp /tmp/versions_production.json dev:/tmp/
fi

Автоматический откат при ошибках

bash
#!/bin/bash
# Обновление с автоматическим откатом

cd /var/www/bitrix

SNAPSHOT_FILE="/var/backup/versions_snapshot_$(date +%Y%m%d_%H%M%S).json"

# Создать снимок текущих версий
php -r "
\$conn = Bitrix\Main\Application::getConnection();
\$result = \$conn->query('SELECT ID, VERSION FROM b_module');
\$versions = [];
while (\$row = \$result->fetch()) {
    \$versions[\$row['ID']] = \$row['VERSION'];
}
file_put_contents('$SNAPSHOT_FILE', json_encode(\$versions, JSON_PRETTY_PRINT));
"

# Функция отката
rollback() {
    echo "Выполнение отката..."
    php bitrix.php update:versions "$SNAPSHOT_FILE"
    php bitrix.php cache:clear
    echo "Откат завершен"
}

# Установить trap для отката при ошибке
trap rollback ERR

# Обновить модули
php bitrix.php update:modules -v

# Проверить работоспособность
if ! curl -s -f http://localhost > /dev/null; then
    echo "Сайт недоступен после обновления"
    exit 1
fi

echo "Обновление успешно завершено"

Мониторинг обновлений

Проверка доступных обновлений

bash
#!/bin/bash
# Ежедневная проверка наличия обновлений

cd /var/www/bitrix

# Проверить обновления (требует доступа к update.bitrix.ru)
UPDATES_AVAILABLE=$(php -r "
require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include.php';
CModule::IncludeModule('main');
\$updates = CUpdateClient::GetUpdatesList();
echo count(\$updates);
")

if [ "$UPDATES_AVAILABLE" -gt 0 ]; then
    echo "Доступно обновлений: $UPDATES_AVAILABLE" | \
        mail -s "Bitrix Updates Available" admin@example.com
fi

История обновлений

bash
#!/bin/bash
# Ведение журнала обновлений

cd /var/www/bitrix

HISTORY_FILE="/var/log/bitrix-update-history.log"

# Получить текущие версии
php -r '
$conn = Bitrix\Main\Application::getConnection();
$result = $conn->query("SELECT ID, VERSION FROM b_module ORDER BY ID");
echo "=== ".date("Y-m-d H:i:s")." ===\n";
while ($row = $result->fetch()) {
    echo sprintf("%-30s %s\n", $row["ID"], $row["VERSION"]);
}
echo "\n";
' >> "$HISTORY_FILE"

Troubleshooting

Обновление не работает

Проблема: Модули не обновляются

Решения:

  1. Проверьте подключение к update.bitrix.ru
  2. Проверьте лицензионный ключ
  3. Проверьте права доступа к файлам
  4. Проверьте логи обновлений

Ошибка при откате

Проблема: Не удается откатить версии

Решения:

  1. Проверьте формат JSON-файла
  2. Убедитесь, что файл версий существует
  3. Проверьте права доступа к базе данных
  4. Восстановите из резервной копии

Конфликт зависимостей

Проблема: Ошибка зависимостей при обновлении

Решения:

  1. Обновляйте модули в правильном порядке (сначала main)
  2. Обновите все зависимые модули
  3. Используйте опцию --modules=all для обновления всех сразу

Полезные советы

💡 Создавайте бэкапы - всегда делайте резервную копию перед обновлением

💡 Тестируйте на staging - проверяйте обновления на тестовом окружении

💡 Сохраняйте версии - ведите журнал версий модулей

💡 Автоматизируйте откат - подготовьте скрипты для быстрого отката

💡 Мониторьте - отслеживайте доступные обновления регулярно

💡 Планируйте - обновляйте систему в периоды низкой нагрузки


Смотрите также

Документация BXMax CLI