Управление жизненным циклом 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'