Управление жизненным циклом jail

Команды jstart, jstop и jremove (синоним jdestroy) управляют жизненным циклом FreeBSD jail. Все три команды поддерживают мощные механизмы выбора целей: одиночные имена, списки, маски и SQL-запросы.

Встроенная справка и примеры доступны для каждой команды:

cbsd jstart --help
cbsd jstop --help
cbsd jremove --help

Базовый синтаксис

cbsd jstart jname=<jailname>
cbsd jstop jname=<jailname>
cbsd jremove jname=<jailname>

jremove и jdestroy полностью идентичны по функциональности.

Поведение команд

  • jstart — запускает остановленный jail. Если jail уже запущен, команда выдаст соответствующее сообщение.
  • jstop — выполняет остановку jail через exec_stop (по умолчанию /bin/sh /etc/rc.shutdown). Если jail не запущен, команда ничего не делает.
  • jremove — полностью удаляет jail. Если jail запущен, он будет автоматически остановлен перед удалением. Команда удаляет файловую систему jail (ZFS dataset или directory), записи в fstab и связанные снапшоты.

Массовые операции

CBSD поддерживает выполнение операций над группой jail одновременно.

Маски (wildcards)

Параметр jname принимает шаблоны с символом *:

# Запустить все jail, чьё имя начинается с 'sd'
cbsd jstart jname='sd*'

# Остановить ВСЕ jail на хосте
cbsd jstop jname='*'

# Удалить все jail, начинающиеся с 'test'
cbsd jremove jname='test*'

Несколько explicit имён

Вместо jname= можно перечислить jail напрямую:

cbsd jstop web1 web2 web3
cbsd jstart db1 db2 db3 cache1

Комбинация подходов

Можно использовать оба механизма:

cbsd jstart jname='prod-*' staging1 staging2

Параллельное выполнение

Операции над несколькими jail могут выполняться параллельно. Поведение настраивается через параметр parallel в cbsd initenv-tui.

SQL WHERE — выборка по условиям

Наиболее мощная возможность — отбор jail с помощью SQL-подобного условия после ключевого слова WHERE. Это позволяет точно контролировать, какие jail затронет операция.

Синтаксис

cbsd <command> WHERE <sql-condition>

<sql-condition> — стандартное SQL выражение, поддерживающее:

  • Сравнения: =, !=, <, >
  • Логические операторы: AND, OR
  • Паттерн-матчинг: LIKE
  • Группировку скобками

Примеры

Остановить все запущенные jail с автостартом

cbsd jstop WHERE status='1' AND astart='1'

Это остановит только те jail, которые в данный момент запущены (status='1') и имеют включённый автостарт (astart='1').

Запустить jail с автостартом, VNET и определённым IP-диапазоном

cbsd jstart WHERE astart=1 AND vnet=1 AND ip4_addr LIKE '1%'

Запустит jail, у которых: - Включён автостарт (astart=1) - Настроено изолированное сетевое пространство (vnet=1) - IPv4 адрес начинается с 1 (например, 10.0.0.x, 192.168.x.x)

Остановить все не-VNET jail

cbsd jstop WHERE vnet=0

Удалить все скрытые jail

cbsd jremove WHERE hidden=1

Сложное условие с OR

cbsd jstart WHERE (astart=1 AND status=0) OR jname='emergency'

Запустит все остановленные jail с автостартом, плюс конкретный jail emergency независимо от его настроек.

Доступные поля для WHERE

WHERE-условие может ссылаться на любые столбцы таблицы jail в базе данных CBSD. Основные поля:

Поле Тип Описание
jname TEXT Имя jail
status INT Текущий статус: 0 = остановлен, 1 = запущен
astart INT Автостарт: 0 = выкл, 1 = вкл
vnet INT VNET изоляция: 0 = выкл, 1 = вкл
ip4_addr TEXT IPv4 адрес
hidden INT Скрытый флаг: 0 = видим, 1 = скрыт
host_hostname TEXT FQDN jail
ver TEXT Версия FreeBSD release
arch TEXT Архитектура
path TEXT Путь к корневой директории jail
interface TEXT Сетевой интерфейс
tags TEXT Пользовательские метки
basename TEXT Имя базового release для клонов

Практические сценарии

Аварийная остановка

Остановить всё одной командой:

cbsd jstop jname='*'

Или через WHERE:

cbsd jstop WHERE status=1

Перезагрузка продакшн-окружения

cbsd jstop jname='prod-*'
cbsd jstart jname='prod-*'

Очистка тестовых окружений

Удалить все тестовые jail:

cbsd jremove jname='test*'
cbsd jremove jname='tmp*'

Или удалить все jail с определённым тегом:

cbsd jremove WHERE tags LIKE '%ephemeral%'

Запуск только VNET-jail после обновления сети

cbsd jstart WHERE vnet=1 AND astart=1

Удаление jail старой версии FreeBSD

cbsd jremove WHERE ver='13.0'

Связанные страницы