π CLI-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΠ
Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ XC_VM, ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ ΡΡΠΈΠ»ΠΈΡΠ°ΠΌ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
.
ΠΠΎΠΊΡΡΠ²Π°Π΅Ρ ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠΊΡΡΡΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ
ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ ΠΠ.
---
## π ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ
* [π₯ Π’ΠΎΡΠΊΠ° Π²Ρ
ΠΎΠ΄Π° ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ](#ΡΠΎΡΠΊΠ°-Π²Ρ
ΠΎΠ΄Π°-ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ)
* [οΏ½ ΠΠΎΠ»Π½ΡΠΉ ΡΠ΅Π΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄](#ΠΏΠΎΠ»Π½ΡΠΉ-ΡΠ΅Π΅ΡΡΡ-ΠΊΠΎΠΌΠ°Π½Π΄)
* [π Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ](#ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ-Π½ΠΎΠ²ΠΎΠΉ-ΠΊΠΎΠΌΠ°Π½Π΄Ρ)
* [π§ ΠΠΎΠΌΠ°Π½Π΄Π° tools](#ΠΊΠΎΠΌΠ°Π½Π΄Π°-tools)
* [π ΠΠΈΠ³ΡΠ°ΡΠΈΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
](#ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ-Π±Π°Π·Ρ-Π΄Π°Π½Π½ΡΡ
)
* [π Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ](#ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅-Π½ΠΎΠ²ΠΎΠΉ-ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ)
* [βοΈ Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ CLI-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ](#ΡΠΈΠΏΠΈΡΠ½ΡΠ΅-cli-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ)
---
## π₯ Π’ΠΎΡΠΊΠ° Π²Ρ
ΠΎΠ΄Π° ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ
ΠΡΠ΅ CLI-ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π· `console.php`:
```bash
/home/xc_vm/console.php [args...]
```
ΠΠΎΠ½ΡΠΎΠ»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΈ ΡΠΈΠΏΠ° ΠΊΠΎΠΌΠ°Π½Π΄:
| Π’ΠΈΠΏ | ΠΠΎΠ»-Π²ΠΎ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|---|
| **Commands** | 26 | Π Π°Π·ΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (update, status, tools ΠΈ Π΄Ρ.) |
| **CronJobs** | 25 | ΠΠ°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ (Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊ ΡΠ΅ΡΠ΅Π· crontab) |
| **Daemons** | 8 | Π€ΠΎΠ½ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ-Π΄Π΅ΠΌΠΎΠ½Ρ (Commands, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ `DaemonTrait`) |
> **ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:** ΠΠ΅ΠΌΠΎΠ½Ρ β ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠ΅ Commands Ρ ΡΡΠ΅ΠΉΡΠΎΠΌ `DaemonTrait`. ΠΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ `Daemons/` Π½Π΅Ρ.
ΠΠ»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π²ΡΠ΅Ρ
Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
ΠΊΠΎΠΌΠ°Π½Π΄:
```bash
/home/xc_vm/console.php list
```
---
## π ΠΠΎΠ»Π½ΡΠΉ ΡΠ΅Π΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄
### Π£ΡΠΈΠ»ΠΈΡΠ°ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
| ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠ»Π°ΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ |
|---|---|---|---|
| `status` | `StatusCommand` | Π‘ΡΠ°ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΠ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ | root |
| `update` | `UpdateCommand` | ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ (update / post-update) | xc_vm |
| `service` | `ServiceCommand` | Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ XC_VM: start, stop, restart, reload | root |
| `tools` | `ToolsCommand` | Π£ΡΠΈΠ»ΠΈΡΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ (ΡΠΌ. [ΠΠΎΠΌΠ°Π½Π΄Π° tools](#ΠΊΠΎΠΌΠ°Π½Π΄Π°-tools)) | root/xc_vm |
| `certbot` | `CertbotCommand` | ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ SSL-ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° ΡΠ΅ΡΠ΅Π· certbot | root |
| `binaries` | `BinariesCommand` | ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΎΠ² ΠΈ GeoLite ΠΈΠ· GitHub | xc_vm |
| `startup` | `StartupCommand` | ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ: daemons.sh, crontab, ΠΊΠ΅Ρ | root |
| `monitor` | `MonitorCommand` | ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΡΡΠΈΠΌΠ° ΠΏΠΎ ID (Π·Π°ΠΏΡΡΠΊ/ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊ/ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅) | xc_vm |
| `thumbnail` | `ThumbnailCommand` | ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΏΡΠ΅Π²ΡΡ-ΠΊΠ°Π΄ΡΠΎΠ² Π΄Π»Ρ ΡΡΡΠΈΠΌΠ° | xc_vm |
| `plex_item` | `PlexItemCommand` | ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Plex (ΡΠΈΠ»ΡΠΌ/ΡΠ΅ΡΠΈΠ°Π») | xc_vm |
| `watch_item` | `WatchItemCommand` | ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Watch (ΠΏΠΎΠΈΡΠΊ/ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ TMDB) | xc_vm |
| `migrate` | `MigrateCommand` | ΠΠΈΠ³ΡΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΈΠ· ΠΠ `xc_vm_migrate` | xc_vm |
| `balancer` | `BalancerCommand` | Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°/Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊΠ° ΠΏΠΎ SSH | root |
> ΠΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ (ΡΡΠ»ΠΎΠ²Π½Π°Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· `file_exists()`): `cache_handler`, `balancer`, `migrate`.
### ΠΠΎΠΌΠ°Π½Π΄Ρ-Π΄Π΅ΠΌΠΎΠ½Ρ (ΡΠΎΠ½ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ)
ΠΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ `DaemonTrait` ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎ ΡΠ΅ΡΠ΅Π· `while(true)`:
| ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠ»Π°ΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|---|
| `signals` | `SignalsCommand` | ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° kill/cache ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΈΠ· ΠΠ ΠΈ Redis |
| `watchdog` | `WatchdogCommand` | ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΠΈΡΡΠ΅ΠΌΡ: CPU, ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² |
| `queue` | `QueueCommand` | ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ½ΠΎΠ²ΡΡ
Π·Π°Π΄Π°Ρ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ |
| `scanner` | `ScannerCommand` | Π‘ΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ
ΡΡΡΠΈΠΌΠΎΠ²/ΡΡΡΡΠΎΠΉΡΡΠ² |
| `cache_handler` | `CacheHandlerCommand` | ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΊΠ΅ΡΠ΅ΠΌ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ) |
### ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΡΠΈΠΌΠΎΠ²
| ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠ»Π°ΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|---|
| `proxy` | `ProxyCommand` | ΠΡΠΎΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ MPEG-TS ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΠ΅ΡΠ΅Π· ΡΠΎΠΊΠ΅ΡΡ |
| `archive` | `ArchiveCommand` | TV-Π°ΡΡ
ΠΈΠ² β Π·Π°ΠΏΠΈΡΡ ΡΡΡΠΈΠΌΠ° Π² ΡΠ΅Π³ΠΌΠ΅Π½ΡΡ |
| `created` | `CreatedCommand` | Created Channel β ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° ΠΊΠ°Π½Π°Π»Π° ΠΈΠ· ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² |
| `delay` | `DelayCommand` | ΠΠ°Π΄Π΅ΡΠΆΠΊΠ° Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ HLS-ΡΡΡΠΈΠΌΠ° |
| `loopback` | `LoopbackCommand` | ΠΡΠΈΡΠΌ MPEG-TS Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° |
| `llod` | `LlodCommand` | Low-Latency On-Demand ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΡΡΠΈΠΌΠΎΠ² |
| `record` | `RecordCommand` | ΠΠ°ΠΏΠΈΡΡ ΡΡΡΠΈΠΌΠ° Π² MP4 |
| `ondemand` | `OndemandCommand` | ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΈΠΌΠΎΠ² Π±Π΅Π· Π°ΠΊΡΠΈΠ²Π½ΡΡ
Π·ΡΠΈΡΠ΅Π»Π΅ΠΉ |
### ΠΡΠΎΠ½-Π·Π°Π΄Π°ΡΠΈ (25 ΡΡ.)
ΠΠΌΠ΅Π½Π° Π²ΡΠ΅Ρ
ΠΊΡΠΎΠ½-Π·Π°Π΄Π°Ρ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡ `cron:`. ΠΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ `CronTrait` ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ crontab.
| ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠ»Π°ΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|---|
| `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:plex` | `PlexCronJob` | ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Plex |
| `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:tmdb` | `TmdbCronJob` | ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
TMDB (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ) |
| `cron:tmdb_popular` | `TmdbPopularCronJob` | ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° TMDB (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ) |
| `cron:tmp` | `TmpCronJob` | ΠΡΠΈΡΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² |
| `cron:update` | `UpdateCronJob` | ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ) |
| `cron:users` | `UsersCronJob` | Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΠΌΠΈ, ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Redis |
| `cron:vod` | `VodCronJob` | ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° VOD-ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° |
| `cron:watch` | `WatchCronJob` | ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Watch-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ |
> ΠΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΊΡΠΎΠ½-Π·Π°Π΄Π°ΡΠΈ (ΡΡΠ»ΠΎΠ²Π½Π°Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ): `cron:backups`, `cron:cache_engine`, `cron:epg`, `cron:providers`, `cron:root_mysql`, `cron:series`, `cron:tmdb`, `cron:tmdb_popular`, `cron:update`.
---
## π Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
ΠΡΠ΅ CLI-ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ `CommandInterface` ΠΈ ΡΠ²Π½ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΡΡΡΡ Π² `console.php`.
### CommandInterface
```php
interface CommandInterface {
public function getName(): string; // Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² CLI)
public function getDescription(): string; // ΠΠ΄Π½ΠΎΡΡΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ (ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² `list`)
public function execute(array $rArgs): int; // Π’ΠΎΡΠΊΠ° Π²Ρ
ΠΎΠ΄Π°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ΄ Π²ΡΡ
ΠΎΠ΄Π°
}
```
### Π¨Π°Π³ 1. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠ»Π°ΡΡ
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» Π² `src/cli/Commands/` (ΠΈΠ»ΠΈ `src/cli/CronJobs/` Π΄Π»Ρ ΠΊΡΠΎΠ½-Π·Π°Π΄Π°Ρ):
```php
register(new MyNewCommand());
// ΠΠ»ΠΈ ΡΡΠ»ΠΎΠ²Π½ΠΎ (Π΄Π»Ρ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ)
if (file_exists(CLI_PATH . 'Commands/MyNewCommand.php')) {
$rRegistry->register(new MyNewCommand());
}
```
### Π¨Π°Π³ 3. ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π² Makefile (Π΅ΡΠ»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ· LB)
ΠΡΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΠ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ
ΠΎΠ΄ΠΈΡΡ Π² ΡΠ±ΠΎΡΠΊΡ Load Balancer, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π΅Ρ ΠΏΡΡΡ Π² `LB_FILES_TO_REMOVE` Π² `Makefile`.
### Π¨Π°Π³ 4. Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
```bash
# ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅
/home/xc_vm/console.php list
# ΠΠ°ΠΏΡΡΡΠΈΡΠ΅
/home/xc_vm/console.php my_command
```
---
## π§ ΠΠΎΠΌΠ°Π½Π΄Π° tools
ΠΠΎΠΌΠ°Π½Π΄Π° `tools` ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠΈΠ»ΠΈΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ.
```bash
console.php tools
```
### ΠΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Ρ (Π·Π°ΠΏΡΡΠΊ ΠΎΡ `root`)
| ΠΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Π° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|
| `rescue` | Π‘ΠΎΠ·Π΄Π°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ° Π΄Π»Ρ ΡΠΊΡΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ
ΠΎΠ΄Π° Π² ΠΏΠ°Π½Π΅Π»Ρ. ΠΡΠ²ΠΎΠ΄ΠΈΡ URL. **Π£Π΄Π°Π»ΠΈΡΠ΅ ΠΊΠΎΠ΄ ΠΏΠΎΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ!** |
| `access` | ΠΠ΅ΡΠ΅Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄ΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° nginx ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΡΡ nginx. ΠΡΠ²ΠΎΠ΄ΠΈΡ URL Π²ΡΠ΅Ρ
ΠΊΠΎΠ΄ΠΎΠ² Π°Π΄ΠΌΠΈΠ½-ΠΏΠ°Π½Π΅Π»ΠΈ. |
| `ports` | ΠΠ΅ΡΠ΅Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΡΡΠΎΠ² nginx (HTTP, HTTPS, RTMP) ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΡΡ nginx. |
| `migration` | ΠΡΠΈΡΡΠΈΡΡ Π±Π°Π·Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ (`xc_vm_migrate`) ΠΈ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ `.sql`-Π±ΡΠΊΠ°ΠΏ. |
| `user` | Π‘ΠΎΠ·Π΄Π°ΡΡ rescue-Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΡΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌΠΈ ΡΡΡΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ. ΠΡΠ²ΠΎΠ΄ΠΈΡ Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ. **Π£Π΄Π°Π»ΠΈΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ!** |
| `mysql` | ΠΠ΅ΡΠ΅Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ MySQL Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠΈ. |
| `database` | ΠΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΈΡΡΡΡ ΠΠ XC_VM ΠΈΠ· `database.sql`. **Π£Π΄Π°Π»ΡΠ΅Ρ ΠΠ‘Π Π΄Π°Π½Π½ΡΠ΅!** Π’ΡΠ΅Π±ΡΠ΅Ρ ΡΠ»Π°Π³ `--confirm`. |
| `flush` | Π‘Π±ΡΠΎΡΠΈΡΡ Π²ΡΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ IP β ΠΎΡΠΈΡΠ°Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»Π° iptables, ΡΠ΄Π°Π»ΡΠ΅Ρ ΡΠ°ΠΉΠ»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΠΈ ΠΎΡΠΈΡΠ°Π΅Ρ ΡΠ°Π±Π»ΠΈΡΡ `blocked_ips`. |
### ΠΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Ρ (Π·Π°ΠΏΡΡΠΊ ΠΎΡ `xc_vm`)
| ΠΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Π° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|
| `images` | Π‘ΠΊΠ°ΡΠ°ΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΡΠΈΠΌΠΎΠ²/ΡΠΈΠ»ΡΠΌΠΎΠ²/ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² Ρ TMDB. Π‘ΠΊΠ°Π½ΠΈΡΡΠ΅Ρ ΠΠ ΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ. |
| `duplicates` | ΠΠ°ΠΉΡΠΈ ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΡ VOD-ΡΡΡΠΈΠΌΠΎΠ². ΠΡΡΠΏΠΏΠΈΡΡΠ΅Ρ ΠΏΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΌΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΡ, ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΡΠΉ, ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅. **ΠΠ΅ΡΡΡΡΠΊΡΠΈΠ²Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ!** |
| `bouquets` | ΠΡΠΈΡΡΠΈΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ Π² Π±ΡΠΊΠ΅ΡΠ°Ρ
. Π£Π΄Π°Π»ΡΠ΅Ρ ID, ΠΊΠΎΡΠΎΡΡΡ
Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅Ρ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
. |
### ΠΡΠΈΠΌΠ΅ΡΡ
```bash
# ΠΠΊΡΡΡΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ°Π½Π΅Π»ΠΈ (root)
sudo /home/xc_vm/console.php tools rescue
# ΠΠ΅ΡΠ΅Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄ΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° (root) β ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½Π° nginx
sudo /home/xc_vm/console.php tools access
# ΠΠ΅ΡΠ΅Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΡΡΠΎΠ² (root)
sudo /home/xc_vm/console.php tools ports
# ΠΡΠΈΡΡΠΈΡΡ Π±Π°Π·Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ (root)
sudo /home/xc_vm/console.php tools migration
# ΠΡΠΈΡΡΠΈΡΡ Π±Π°Π·Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±ΡΠΊΠ°ΠΏ (root)
sudo /home/xc_vm/console.php tools migration /path/to/backup.sql
# Π‘ΠΎΠ·Π΄Π°ΡΡ rescue-Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° (root)
sudo /home/xc_vm/console.php tools user
# ΠΠ΅ΡΠ΅Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°ΡΡ MySQL Π½Π° Π²ΡΠ΅Ρ
ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ
(root)
sudo /home/xc_vm/console.php tools mysql
# ΠΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΈΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
(root) β ΠΠΠ‘Π’Π Π£ΠΠ’ΠΠΠΠΠ― ΠΠΠΠ ΠΠ¦ΠΠ―!
sudo /home/xc_vm/console.php tools database --confirm
# Π‘Π±ΡΠΎΡΠΈΡΡ Π²ΡΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ IP (root)
sudo /home/xc_vm/console.php tools flush
# Π‘ΠΊΠ°ΡΠ°ΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ (xc_vm)
su - xc_vm -c '/home/xc_vm/console.php tools images'
# Π£Π΄Π°Π»ΠΈΡΡ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΡ VOD (xc_vm)
su - xc_vm -c '/home/xc_vm/console.php tools duplicates'
# ΠΡΠΈΡΡΠΈΡΡ ΡΡΡΠ»ΠΊΠΈ Π² Π±ΡΠΊΠ΅ΡΠ°Ρ
(xc_vm)
su - xc_vm -c '/home/xc_vm/console.php tools bouquets'
```
> β οΈ **ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅:** `duplicates` Π±Π΅Π·Π²ΠΎΠ·Π²ΡΠ°ΡΠ½ΠΎ ΡΠ΄Π°Π»ΡΠ΅Ρ ΡΡΡΠΈΠΌΡ ΠΈ Π²ΡΠ΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ (Π»ΠΎΠ³ΠΈ, ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°, ΡΠΏΠΈΠ·ΠΎΠ΄Ρ, Π·Π°ΠΏΠΈΡΠΈ). ΠΡΠ΅Π³Π΄Π° Π΄Π΅Π»Π°ΠΉΡΠ΅ Π±ΡΠΊΠ°ΠΏ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ.
> β οΈ **ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅:** `database --confirm` ΡΡΠΈΡΠ°Π΅Ρ Π²ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ Π΅Ρ ΡΠΈΡΡΠΎΠΉ ΡΡ
Π΅ΠΌΠΎΠΉ. ΠΡΠΎ Π½Π΅ΠΎΠ±ΡΠ°ΡΠΈΠΌΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
> π‘ **Π‘ΠΎΠ²Π΅Ρ:** ΠΠΎΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ `rescue` Π²ΡΠ΅Π³Π΄Π° ΡΠ΄Π°Π»ΡΠΉΡΠ΅ ΠΊΠΎΠ΄ ΡΠ΅ΡΠ΅Π· Π°Π΄ΠΌΠΈΠ½-ΠΏΠ°Π½Π΅Π»Ρ ΠΈΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΠ² `tools access` ΠΏΠΎΡΠ»Π΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ°.
> π‘ **Π‘ΠΎΠ²Π΅Ρ:** ΠΠΎΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ `user` Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠΎΠ»Ρ ΠΈ ΡΠ΄Π°Π»ΠΈΡΠ΅ rescue-ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ.
---
## π ΠΠΈΠ³ΡΠ°ΡΠΈΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
XC_VM ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ ΡΡ
Π΅ΠΌΡ ΠΠ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΡΠΈΡΠΌΠΈ. ΠΠΈΠ³ΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡΡ
ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΡΠ°ΡΡΡΠ° ΡΠΈΡΡΠ΅ΠΌΡ.
### ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
1. Π€Π°ΠΉΠ»Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ Ρ
ΡΠ°Π½ΡΡΡΡ ΠΊΠ°ΠΊ `.sql` ΡΠ°ΠΉΠ»Ρ Π²:
```
/home/xc_vm/migrations/
```
2. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°ΠΉΠ» ΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Ρ ΡΠΈΡΠ»ΠΎΠ²ΡΠΌ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ:
```
001_drop_watch_folders_plex_token.sql
002_panel_logs_add_file_env.sql
003_drop_settings_segment_type.sql
```
3. ΠΡΠΈΠΌΠ΅Π½ΡΠ½Π½ΡΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ `migrations` ΠΠ. ΠΠ°ΠΆΠ΄Π°Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ **ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·** β Π΅ΡΠ»ΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ ΡΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π°, ΠΎΠ½Π° ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ.
4. ΠΠΈΠ³ΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ:
- `console.php update post-update` β ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ°Π½Π΅Π»ΠΈ
- `console.php status` β ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΡΠ°ΡΡΡΠ° ΡΠΈΡΡΠ΅ΠΌΡ (ΡΠΎΠ»ΡΠΊΠΎ Π½Π° MAIN-ΡΠ΅ΡΠ²Π΅ΡΠ΅)
### ΠΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ
```text
[ MigrationRunner::run() ]
β
βΌ
[ CREATE TABLE IF NOT EXISTS `migrations` ]
β
βΌ
[ Π§ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
*.sql ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ· migrations/ ]
β
βΌ
[ ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ `migrations`: ]
βββ ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ SQL-Π·Π°ΠΏΡΠΎΡΡ
βββ ΠΠ°ΠΏΠΈΡΠ°ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΡ `migrations`
βββ ΠΡΠ²Π΅ΡΡΠΈ [OK] ΠΈΠ»ΠΈ [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 ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ:**
1. **ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ `IF EXISTS` / `IF NOT EXISTS`** Π΄Π»Ρ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ:
```sql
-- ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ (Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ)
ALTER TABLE `settings` ADD COLUMN IF NOT EXISTS `timezone` VARCHAR(64) DEFAULT 'UTC';
-- Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ (Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ)
ALTER TABLE `settings` DROP COLUMN IF EXISTS `old_column`;
-- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡΡ (Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ)
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;
```
2. **ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ»ΠΎΠ²Π½ΡΠΉ `INSERT`** Π΄Π»Ρ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΡ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΎΠ²:
```sql
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');
```
3. **ΠΠ΅ ΡΠΌΠ΅ΡΠΈΠ²Π°ΠΉΡΠ΅ DDL ΠΈ DML**, Π·Π°Π²ΠΈΡΡΡΠΈΠ΅ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°, Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅. ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡ ΠΈ Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ Π΅Ρ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΄Π²Π° ΡΠ°ΠΉΠ»Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ.
4. **ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ** ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ `--` (ΠΎΠ½ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ).
### Π¨Π°Π³ 3. Π Π°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΠ°ΠΉΠ»
Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΡΠ°ΠΉΠ» ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Π²:
```
/home/xc_vm/migrations/
```
> π‘ Π ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΡΠΎ `src/migrations/`.
### Π¨Π°Π³ 4. Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ status Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ
ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ:
```bash
sudo /home/xc_vm/console.php status first-run
```
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ Π²ΡΠ²ΠΎΠ΄:
```
Migrations
------------------------------
[OK] 006_add_user_timezone.sql
```
ΠΡΠ»ΠΈ Π·Π°ΠΏΡΠΎΡ Π·Π°Π²Π΅ΡΡΠΈΠ»ΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ Π²ΡΡ ΡΠ°Π²Π½ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠΈΡΠ°Π½Π°, Π½ΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ `[WARN]` β ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ SQL ΠΈ ΠΈΡΠΏΡΠ°Π²ΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
---
## βοΈ Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ CLI-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
### ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ°ΡΡΡΠ°
```bash
sudo /home/xc_vm/console.php status
```
ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π·Π°ΠΏΡΡΠ΅Π½ Π»ΠΈ XC_VM, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ ΠΠ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ, ΠΈΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΈ Π²Π°Π»ΠΈΠ΄ΠΈΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ nginx. Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ.
Π‘ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ `first-run` ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΡΠ°ΡΡΡΠ° β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅:
```bash
sudo /home/xc_vm/console.php status first-run
```
### Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ
```bash
sudo /home/xc_vm/console.php service start|stop|restart|reload
```
### Π ΡΡΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
```bash
sudo -u xc_vm /home/xc_vm/console.php update update
```
Π‘ΠΊΠ°ΡΠΈΠ²Π°Π΅Ρ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ GitHub. ΠΠ±ΡΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅ΡΠ΅Π· Π²Π΅Π±-ΠΏΠ°Π½Π΅Π»Ρ.
### ΠΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° ΡΡΡΠΈΠΌΠΎΠ²
```bash
sudo -u xc_vm /home/xc_vm/console.php monitor
```
ΠΠ°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΡΡΠΈΠΌ Π²ΡΡΡΠ½ΡΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΡΠΈΠΌΠΎΠ².
### SSL-ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ
```bash
sudo /home/xc_vm/console.php certbot
```
### ΠΠΈΠ³ΡΠ°ΡΠΈΡ (Ρ Π΄ΡΡΠ³ΠΈΡ
ΡΠΈΡΡΠ΅ΠΌ)
```bash
/home/xc_vm/console.php migrate
```
ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π±Π°Π·Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π² [Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΏΠΎ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ](ru-ru/info/migration_guide.md).
---