30 KiB
Инструменты CLI и обновления баз данных
Справочник по интерфейсу командной строки XC_VM, системным инструментам и процессу обновления базы данных после обновления версии. Содержит описание ежедневных операций, экстренного доступа и создания новых этапов обновления базы данных.
Точка входа в консоль
Все команды CLI выполняются через console.php:
/home/xc_vm/console.php <command> [args...]
Консоль поддерживает три типа команд:
| Тип | Рассчитывать | Описание |
|---|---|---|
| Команды | 28 | Одноразовые операции (обновление, статус, инструменты и т.д.) |
| Закадычные друзья | 25 | Запланированные задачи (автоматически вызываемые crontab) |
| Демоны | 8 | Длительно выполняющиеся фоновые процессы (команды, использующие DaemonTrait) |
Примечание: Демоны - это обычные команды, которые используют
DaemonTrait. Отдельного каталогаDaemons/не существует.
Чтобы просмотреть все доступные команды:
/home/xc_vm/console.php list
Полный реестр команд
Служебные команды
| Команда | Класс | Описание | Пользователь |
|---|---|---|---|
status |
StatusCommand |
Состояние системы, обновления базы данных, проверка конфигурации | корень |
update |
UpdateCommand |
Обновление системы (update / после обновления) | xc_vm |
service |
ServiceCommand |
Управление службой XC_VM: запуск, остановка, перезапуск, перезагрузка | корень |
tools |
ToolsCommand |
Утилиты технического обслуживания (см. раздел команды "Инструменты") | корень/xc_vm |
certbot |
CertbotCommand |
Сгенерируйте SSL-сертификат с помощью certbot | корень |
binaries |
BinariesCommand |
Обновите пакет среды выполнения (php/nginx/...) из выпуска XC_VM_Binaries |
xc_vm |
fanout_binary |
FanoutBinaryCommand |
Установите/обновите двоичный файл демона xc_fanout с момента его выпуска |
корень |
xcvm_core |
XcvmCoreCommand |
Установите/обновите расширение xcvm_core PHP из хранилища двоичных файлов |
корень |
ytdlp |
YtDlpCommand |
Установите/обновите yt-dlp из своей предыдущей версии на GitHub |
корень |
startup |
StartupCommand |
Инициализация системы: daemons.sh, crontab, кэш | корень |
monitor |
MonitorCommand |
Отслеживайте поток по идентификатору (запуск/перезапуск/отслеживание) | xc_vm |
thumbnail |
ThumbnailCommand |
Создание рамок миниатюр для потока | xc_vm |
plex_item |
PlexItemCommand |
Обработать один элемент Plex (фильм/сериал) | xc_vm |
watch_item |
WatchItemCommand |
Обработать один элемент наблюдения (поиск/обновление в базе данных TMDB) | xc_vm |
migrate |
MigrateCommand |
Перенос данных из базы данных xc_vm_migrate |
xc_vm |
db:migrate |
DbMigrateCommand |
Применить ожидающие переноса базы данных из каталога migrations/ |
xc_vm |
server:install |
ServerInstallCommand |
Установка/настройка сервера (Proxy/LB) через SSH | корень |
server:diagnose |
ServerDiagnoseCommand |
Диагностировать, почему прокси-узел/LB-узел не подключен к главному (частота сердечных сокращений, доступность, iptables, сервис) | корень |
Команды, помеченные необязательно, условно регистрируются с помощью
file_exists()guard:cache_handler,server:install,migrate.
Команды демона (постоянные процессы)
Эти команды используют DaemonTrait и выполняются непрерывно через циклы while(true):
| Команда | Класс | Описание |
|---|---|---|
signals |
SignalsCommand |
Обрабатывать сигналы уничтожения/кэширования из базы данных и Redis |
watchdog |
WatchdogCommand |
Мониторинг системы: процессор, подключения, обновления сервера |
queue |
QueueCommand |
Обрабатывать фоновые задачи в очереди |
scanner |
ScannerCommand |
Поиск новых потоков/устройств |
cache_handler |
CacheHandlerCommand |
Обрабатывать операции с кэшем (необязательно) |
Команды потоковой обработки
| Команда | Класс | Описание |
|---|---|---|
proxy |
ProxyCommand |
MPEG-TS потоковое проксирование через сокеты |
archive |
ArchiveCommand |
Телевизионный архив — запись потока на сегменты |
created |
CreatedCommand |
Созданный канал — создание канала из исходных текстов |
delay |
DelayCommand |
Задержка HLS воспроизведения потока |
loopback |
LoopbackCommand |
Получить MPEG-TS с другого сервера |
llod |
LlodCommand |
Потоковый процессор с низкой задержкой по требованию |
record |
RecordCommand |
Запись потока в формате MP4 |
ondemand |
OndemandCommand |
Прерывать трансляции без активных зрителей |
Задания Cron (всего 26: 22 ядра + 4 модуля)
Все имена заданий cron имеют префикс cron:. Для них используется CronTrait, и они вызываются системой crontab.
Основные задания cron (в src/Cli/CronJobs/):
| Команда | Класс | Описание |
|---|---|---|
cron:activity |
ActivityCronJob |
Импорт журналов действий пользователей в базу данных |
cron:backups |
BackupsCronJob |
Управление резервными копиями (необязательно) |
cron:cache |
CacheCronJob |
Управление кэшем |
cron:cache_engine |
CacheEngineCronJob |
Генерировать кэш для строк, потоков, серий, групп (необязательно) |
cron:certbot |
CertbotCronJob |
Обновление SSL-сертификата |
cron:cleanup |
CleanupCronJob |
Очистка временных файлов и журналов |
cron:epg |
EpgCronJob |
EPG загрузка и обработка (необязательно) |
cron:errors |
ErrorsCronJob |
Журналы ошибок процесса |
cron:lines_logs |
LinesLogsCronJob |
Импорт журналов клиентских запросов в базу данных |
cron:maxmind |
MaxMindCronJob |
Обновление баз данных MaxMind GeoIP (только по вторникам; --force для запуска вручную) |
cron:providers |
ProvidersCronJob |
Поставщики обновлений (необязательно) |
cron:root_mysql |
RootMysqlCronJob |
Обслуживание базы данных (root, необязательно) |
cron:root_signals |
RootSignalsCronJob |
Сигналы обработки, iptables, nginx, управление сервисами и ** двоичное самовосстановление** (root) |
cron:series |
SeriesCronJob |
Обновление данных серии (необязательно) |
cron:servers |
ServersCronJob |
Контролируйте сервер, запускайте демонов, обновляйте статистику |
cron:stats |
StatsCronJob |
Вычислять и хранить статистику |
cron:streams |
StreamsCronJob |
Проверка и обновление статуса потока |
cron:streams_logs |
StreamsLogsCronJob |
Импорт журналов потоков |
cron:tmp |
TmpCronJob |
Очистка временных файлов |
cron:update |
UpdateCronJob |
Проверять и применять обновления (необязательно) |
cron:users |
UsersCronJob |
Управление подключениями пользователей, синхронизацией Redis, расхождением |
cron:vod |
VodCronJob |
Содержание процесса VOD |
Модуль cron заданий (зарегистрирован через ModuleInterface::registerCommands()):
| Команда | Класс | Модуль | Описание |
|---|---|---|---|
cron:plex |
PlexCronJob |
сплетение | Обрабатывать обновления Plex |
cron:tmdb |
TmdbCronJob |
тмдб | Получение метаданных TMDB (необязательно) |
cron:tmdb_popular |
TmdbPopularCronJob |
тмдб | Выборка популярного содержимого TMDB (необязательно) |
cron:watch |
WatchCronJob |
часы | Обрабатывать обновления библиотеки отслеживания |
Дополнительные задания cron (условно зарегистрированные):
cron:backups,cron:cache_engine,cron:epg,cron:providers,cron:root_mysql,cron:series,cron:tmdb,cron:tmdb_popular,cron:update.
Бинарное самообновление (самовосстановление)
Некоторые связанные двоичные файлы ** не** поставляются внутри пакета heavy runtime bundle и могут
в противном случае никогда не обновляйтесь между выпусками панели (новый узел LB или узел, оставленный включенным
старая сборка, никогда не сходилась бы). cron:root_signals (root, каждую минуту) сохраняет
они становятся текущими путем опроса их идемпотентных команд обновления для каждого двоичного файла на
расписание с ограниченным использованием штампов - каждая загрузка выполняется только при несоответствии версии, проверяется
контрольная сумма, запуск-тестирует новый двоичный файл, затем заменяет его атомарно (неработающая загрузка
никогда не заменяет рабочий). Выполняется на каждом узле (главном ** и** LB).
| Двоичный | Команда | Источник | Проверить | Опрос |
|---|---|---|---|---|
xc_fanout демон |
fanout_binary |
XC_VM_Fanout освободить актив |
SHA256SUMS |
~ежечасно |
xcvm_core расширение |
xcvm_core |
XC_VM_Binaries дерево репозиториев (bin/xcvm_core/) |
SHA256SUMS + нагрузочный тест |
~ежечасно |
yt-dlp |
ytdlp |
вышестоящий yt-dlp/yt-dlp релиз |
SHA2-256SUMS + --version |
ежедневный |
Марки живут в CRONS_TMP_PATH (fanout_binary_check, xcvm_core_check,
ytdlp_check); первый проход (штамп отсутствует) выполняется немедленно, поэтому новый
install/LB получает двоичный файл в течение минуты. Пакет heavy runtime bundle
(php/nginx/ffmpeg) вместо этого обновляется командой binaries, запускаемой
update_binaries сигнал от ГЛАВНОГО устройства.
Регистрация новой команды
Все команды CLI реализуют CommandInterface. Основные команды автоматически обнаруживаются из src/Cli/ с помощью отражения в console.php. Команды модуля регистрируются с помощью ModuleLoader::registerAllCommands().
Командный интерфейс
interface CommandInterface {
public function getName(): string; // Unique command name (used in CLI)
public function getDescription(): string; // One-line help text (shown in `list`)
public function execute(array $rArgs): int; // Entry point, returns exit code
}
Шаг 1. Создайте класс
Создайте новый файл в src/Cli/Commands/ (или src/Cli/CronJobs/ для заданий cron):
<?php
class MyNewCommand implements CommandInterface {
public function getName(): string {
return 'my_command';
}
public function getDescription(): string {
return 'Short description of what it does';
}
public function execute(array $rArgs): int {
// Your logic here
echo "Done.\n";
return 0; // 0 = success, 1 = error
}
}
Для команд daemon также используйте DaemonTrait:
class MyDaemonCommand implements CommandInterface {
use DaemonTrait;
// ...
}
Для заданий cron используйте CronTrait:
class MyCronJob implements CommandInterface {
use CronTrait;
public function getName(): string {
return 'cron:my_job'; // Cron names are prefixed with cron:
}
// ...
}
Шаг 2. Зарегистрируйтесь в console.php
Добавить к console.php:
// Always loaded
$rRegistry->register(new MyNewCommand());
// Or conditionally (for optional features)
if (file_exists(CLI_PATH . 'Commands/MyNewCommand.php')) {
$rRegistry->register(new MyNewCommand());
}
Шаг 3. Добавить в Makefile (если LB-исключен)
Если команда не должна включаться в сборки подсистемы балансировки нагрузки, добавьте ее путь к LB_FILES_TO_REMOVE в поле Makefile.
Шаг 4. Тестирование
# Verify it appears in the list
/home/xc_vm/console.php list
# Run it
/home/xc_vm/console.php my_command
Команда инструментов
Команда tools предоставляет утилиты для обслуживания системы.
/home/xc_vm/console.php tools <subcommand>
Подкоманды (запускаются как root)
| Подкомандование | Описание |
|---|---|
rescue |
Создайте временный код аварийного доступа для доступа к панели экстренной помощи. Введите URL-адрес. Удалите этот код после использования! |
recaptcha |
Отключите reCAPTCHA (recaptcha_enable = 0), чтобы восстановить вход в панель администратора при сбое проверки captcha. |
access |
Восстановите все настройки кода доступа nginx и перезагрузите nginx. Печатает URL-адреса для всех кодов панели администратора. |
ports |
Восстановите настройки портов nginx (HTTP, HTTPS, RTMP) из базы данных и перезагрузите nginx. |
migration |
Очистите промежуточную базу данных (xc_vm_migrate) и при необходимости восстановите в ней резервную копию .sql. |
user |
Создайте пользователя rescue admin со случайными учетными данными. Введите имя пользователя и пароль. Удалите этого пользователя после использования! |
mysql |
Повторно авторизуйте привилегии MySQL для всех серверов load balancer. |
database |
Восстановите пустую базу данных XC_VM из database.sql. Удаляет ВСЕ данные! Требуется флажок --confirm. |
flush |
Очистить все заблокированные IP—адреса - очищает правила iptables, удаляет файлы блокировки и обрезает таблицу blocked_ips. |
Подкоманды (запускаются как xc_vm)
| Подкомандование | Описание |
|---|---|
images |
Загрузите отсутствующие изображения потоковых передач/фильмов/сериалов из базы данных TMDB. Сканирует базу данных в поисках URL-адресов изображений и загружает отсутствующие файлы. |
duplicates |
Найдите и удалите повторяющиеся потоки VOD. Группируйте по идентичному источнику, сохраняйте первый, удаляйте остальные. Деструктивный! |
bouquets |
Удалите устаревшие ссылки из букетов. Удаляет идентификаторы, которые больше не существуют в базе данных. |
Примеры
# Emergency panel access (root)
sudo /home/xc_vm/console.php tools rescue
# Disable reCAPTCHA to recover admin login (root)
sudo /home/xc_vm/console.php tools recaptcha
# Regenerate access codes (root) — required after nginx template changes
sudo /home/xc_vm/console.php tools access
# Regenerate port configuration (root)
sudo /home/xc_vm/console.php tools ports
# Clear staging database (root)
sudo /home/xc_vm/console.php tools migration
# Clear staging database and restore a backup (root)
sudo /home/xc_vm/console.php tools migration /path/to/backup.sql
# Create rescue admin user (root)
sudo /home/xc_vm/console.php tools user
# Reauthorise MySQL privileges on all servers (root)
sudo /home/xc_vm/console.php tools mysql
# Restore blank database (root) — DESTRUCTIVE!
sudo /home/xc_vm/console.php tools database --confirm
# Flush all blocked IPs (root)
sudo /home/xc_vm/console.php tools flush
# Download missing images (xc_vm)
su - xc_vm -c '/home/xc_vm/console.php tools images'
# Remove duplicate VOD entries (xc_vm)
su - xc_vm -c '/home/xc_vm/console.php tools duplicates'
# Clean orphaned bouquet references (xc_vm)
su - xc_vm -c '/home/xc_vm/console.php tools bouquets'
- ❗️ Внимание:
duplicatesстримы и все связанные с ними данные (журналы, статистика, эпизоды, записи) удаляются безвозвратно. Всегда создавайте резервную копию перед запуском. - ❗️ Внимание:
database --confirmудаляет всю базу данных и заменяет ее пустой схемой. Это необратимо. - 💡 ** Совет:** После запуска
rescueвсегда удаляйте код через панель администратора или запустивtools access, как только вы восстановите доступ. - 💡 ** Совет:** После запуска
userнемедленно измените пароль и по завершении удалите пользователя для восстановления.
Обновления базы данных после Обновления Версии
XC_VM использует файловую систему обновления базы данных для управления изменениями схемы между версиями. Обновления базы данных выполняются автоматически во время обновлений и проверок состояния системы.
как это работает
-
SQL-файлы для обновлений базы данных хранятся в
/home/xc_vm/migrations/. -
Каждому файлу присваивается имя с префиксом последовательного номера, например:
001_drop_watch_folders_plex_token.sql
002_panel_logs_add_file_env.sql
003_drop_settings_segment_type.sql
-
Применяемые шаги обновления базы данных отслеживаются в таблице базы данных
migrations. Каждый шаг выполняется ровно один раз - если шаг уже был применен, он пропускается. -
Обновления базы данных выполняются автоматически:
console.php update post-update- после обновления панелиconsole.php status- во время проверки состояния системы (только для главного сервера)
Поток выполнения обновления базы данных
[ MigrationRunner::run() — DB update execution ]
│
▼
[ CREATE TABLE IF NOT EXISTS `migrations` ]
│
▼
[ Read all *.sql files from migrations/ ]
│
▼
[ For each file not in `migrations` table: ]
├── Execute SQL statements
├── Record in `migrations` table
└── Output [OK] or [WARN]
Создание нового шага обновления базы данных
Когда вам нужно изменить схему базы данных (добавить столбцы, создать таблицы, вставить данные и т.д.), создайте новый SQL-файл для этапа обновления базы данных.
Шаг 1. Выберите имя файла
Используйте следующий порядковый номер и описательное название:
NNN_short_description.sql
Правила форматирования:
- Числовой префикс: 3 цифры, дополненные нулем (например,
006,007) - Разделитель: символ подчеркивания
_ - Название: нижний регистр, подчеркивание, описывающее, что делает шаг обновления
- Добавочный номер:
.sql
Примеры:
006_add_user_timezone.sql
007_create_audit_log_table.sql
008_insert_default_codec_settings.sql
Шаг 2. Напишите SQL-код
Поместите в файл необработанные инструкции SQL. Несколько инструкций разделяются символом ;.
Правила для этапов обновления базы данных SQL:
- Используйте
IF EXISTS/IF NOT EXISTS, чтобы сделать шаги обновления базы данных идемпотентными:
-- Adding a column (safe)
ALTER TABLE `settings` ADD COLUMN IF NOT EXISTS `timezone` VARCHAR(64) DEFAULT 'UTC';
-- Dropping a column (safe)
ALTER TABLE `settings` DROP COLUMN IF EXISTS `old_column`;
-- Creating a table (safe)
CREATE TABLE IF NOT EXISTS `audit_log` (
`id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`action` VARCHAR(255) NOT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- Используйте условное обозначение
INSERT, чтобы избежать дублирования:
INSERT INTO `streams_arguments` (argument_key, argument_name, argument_cmd)
SELECT 'my_key', 'My Argument', '-my_flag %s'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `streams_arguments` WHERE argument_key = 'my_key');
-
Не смешивайте DDL и DML, которые зависят друг от друга, в одном файле. Если вам нужно добавить столбец и затем заполнить его, используйте два файла шага обновления базы данных.
-
Комментарии поддерживаются с префиксом
--(они пропускаются во время выполнения).
Шаг 3. Поместите файл
Скопируйте SQL-файл для шага обновления базы данных в:
/home/xc_vm/migrations/
💡 В хранилище исходных текстов это значение равно
src/migrations/.
Шаг 4. Подтвердите обновление базы данных
Запустите db:migrate, чтобы применить ожидающие обновления БД шаги:
su - xc_vm -c '/home/xc_vm/console.php db:migrate'
Или через status first-run (также запускает миграции):
sudo /home/xc_vm/console.php status first-run
Ожидаемый результат:
Migrations
------------------------------
[OK] 006_add_user_timezone.sql
Если инструкция не выполняется, шаг все равно будет записан, но покажет [WARN] — проверьте SQL и устраните любые проблемы.
Общие операции CLI
Проверка состояния
sudo /home/xc_vm/console.php status
Проверяет, запущен ли параметр XC_VM, подключается к базе данных, выполняет ожидающие обновления шаги, исправляет разрешения и проверяет конфигурацию nginx. Требуется после установки или восстановления.
С аргументом first-run пропускает текущую проверку, используемую для начальной настройки:
sudo /home/xc_vm/console.php status first-run
Управление услугами
sudo /home/xc_vm/console.php service start|stop|restart|reload
Обновление вручную
sudo -u xc_vm /home/xc_vm/console.php update update
Загружает и применяет последнее обновление с GitHub. Обычно запускается автоматически через веб-панель.
Диагностика потока
sudo -u xc_vm /home/xc_vm/console.php monitor <stream_id>
Запускает поток вручную и отображает все ошибки. Полезно для диагностики сбоев при запуске потока.
Диагностика сервера (узла)
# On the MAIN — remote-probe a node by its server id
sudo /home/xc_vm/console.php server:diagnose <server_id>
# On the LB/proxy node itself — local self-diagnosis (no arguments)
sudo /home/xc_vm/console.php server:diagnose
Выясняет, почему прокси—узел/LB—узел отображается в автономном режиме на панели: проверяет частоту сердечных сокращений, доступность (ICMP/TCP/HTTP /api), перекос часов, очередь сигналов и - локально на узле - выполняет ли узел брандмауэр на главном IP-адресе в своем собственном iptables, запущена ли служба xc_vm/nginx, запущен ли демон heartbeat watchdog и находится ли cron:servers в crontab xc_vm. Доступно только для чтения; код выхода 0 = проблем не обнаружено, 2 = указаны вероятные причины. Более подробную информацию смотрите в Руководстве по диагностике сервера.
SSL-сертификат
sudo /home/xc_vm/console.php certbot
Применяйте перенос базы данных вручную
su - xc_vm -c '/home/xc_vm/console.php db:migrate'
Применяет все ожидающие .sql файлы из /home/xc_vm/migrations/. Используйте это, когда вам нужно выполнить миграцию без полного обновления системы.
Обновление базы данных данными из других систем
/home/xc_vm/console.php migrate
Передает данные из промежуточной базы данных xc_vm_migrate. Подробности см. в Руководстве по обновлению базы данных.
Связанные файлы
| Файл | Роль |
|---|---|
src/console.php |
Точка входа CLI + обнаружение команды FQCN |
src/Cli/Commands/ |
Консольные команды |
src/Cli/CronJobs/ |
Классы заданий Cron |
src/migrations/ |
Миграция баз данных |