---
title: "Príkazy a kontrola stavu — Sentinel for Laravel | Roundly"
description: "Každý príkaz sentinel:* s voľbami a návratovými kódmi, plán, ktorý sa zaregistruje sám, a kontrola stavu s jedenástimi kontrolami."
url: https://roundly-consulting.com/sk/open-source/navody/sentinel-for-laravel/prikazy
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Sentinel for Laravel](https://roundly-consulting.com/sk/open-source/navody/sentinel-for-laravel.md)

# Príkazy a kontrola stavu

Pätnásť príkazov pokrýva inštaláciu, overovanie, údržbu a kľúče. Modely zadávate ako názov triedy alebo morph alias a príkazy volajú injektovaný SentinelManager, takže v testoch bežia aj nad Sentinel::fake().

| Príkaz | Účel |
| --- | --- |
| `sentinel:install {--force}` | Publikuje, vygeneruje predvolený kľúč, ak chýba (algoritmom kruhu), a vypíše ďalšie kroky. |
| `sentinel:check {--json} {--strict}` | Kontrola stavu inštalácie; exit 1 pri zlyhaní (--strict: aj pri varovaní). |
| `sentinel:verify {model?*} {--seal=} {--chunk=500} {--limit=} {--ledger} {--anchor=} {--check-schema} {--json} {--fail-on=*} {--max-findings=1000} {--allow-empty} {--isolated}` | Skenuje zapečatené riadky (aj denník); exit 1 pri zisteniach, 2 keď nie je čo skenovať — pre cron a CI. |
| `sentinel:checkpoint {--connection=*} {--batch=} {--isolated}` | Zloží čakajúce záznamy denníka do kontrolných bodov a publikuje ich do kotiev. |
| `sentinel:reseal {model} {--seal=} {--from-key=} {--only-outdated} {--upgrade-format} {--chunk=500} {--dry-run} {--acknowledge=}` | Znovu zapečatí po rotácii alebo zmene definície; bez --acknowledge nikdy nič „nevyperie“. |
| `sentinel:seal-missing {model} {--seal=} {--reason=} {--chunk=500}` | Baseline pre riadky, ktoré nikdy neboli zapečatené. |
| `sentinel:inspect {model} {id} {--seal=} {--show-values} {--check-schema}` | Jeden riadok: riadok pečate, verdikt, manifest, história, zmenené polia (hodnoty len s --show-values). |
| `sentinel:prune {--idempotency} {--nonces} {--dry-run}` | Zmaže expirované idempotenčné kľúče a nonce. |
| `sentinel:key:generate {--ring=} {--algorithm=hmac-sha256} {--kid=} {--database} {--activate-at=} {--owner-type=} {--owner-id=} {--label=}` | Vygeneruje kľúč (riadky env alebo riadok v databáze). |
| `sentinel:key:import {kid} {--ring=} {--algorithm=} {--signing} {--file=} {--activate-at=} {--owner-type=} {--owner-id=} {--label=}` | Importuje kľúč partnera (alebo vlastný); materiál z --file (PEM alebo base64:…) alebo zo skrytého vstupu, nikdy z argumentu. |
| `sentinel:key:rotate {--ring=} {--algorithm=} {--activate-at=}` | Rotuje podpisový kľúč kruhu (kľúč vlastného drivera sa odmietne). |
| `sentinel:key:revoke {kid} {--ring=} {--reason=}` | Odvolá kľúč. |
| `sentinel:key:retire {kid} {--ring=} {--force}` | Vyradí kľúč (odmietne, kým ho pečate ešte používajú). |
| `sentinel:key:list {--ring=}` | Inventár kľúčov — vrátane labelov, v úvodzovkách a escapovaných — a počet pečatí každého kľúča (na všetkých pripojeniach denníka); nikdy nie materiál. |
| `sentinel:key:reseal {--ring=} {--dry-run}` | Znovu zapečatí kľúče v databáze do obálky 1.2, aby boli ich labely viazané — krok pri prechode z 1.1; pred zápisom vypíše každý label. |

```bash
php artisan sentinel:verify                                   # every sealable model
php artisan sentinel:verify "App\Models\Invoice" --seal=financial --ledger
php artisan sentinel:verify --fail-on=tampered,missing --fail-on=backlog
php artisan sentinel:verify --ledger --anchor='<json>'           # compare a payload from a log anchor
php artisan sentinel:verify --check-schema --limit=10000         # CI against a staging snapshot
php artisan sentinel:reseal "App\Models\Invoice" --from-key=default-20250901-a1b2c3 --dry-run
php artisan sentinel:seal-missing "App\Models\Invoice" --reason="Initial baseline 2026-10"
php artisan sentinel:inspect "App\Models\Invoice" 42 --seal=financial
php artisan sentinel:prune --dry-run
php artisan sentinel:key:list --ring=http
```

## Voľby, ktoré sa oplatí poznať

- \--fail-on berie hodnoty VerificationStatus (tampered, missing, … — aj outdated a unsealed, ktoré inak nikdy nezlyhajú) a hodnoty LedgerFindingKind, opakovane alebo oddelené čiarkou. Uvedené stavy nahradia predvolené — zlyhajú len tie; ak uvediete len druhy zistení denníka, zlyhávajúce stavy ostanú všetky. Porušenia denníka zlyhajú vždy; backlog a anchor\_unreachable len vtedy, ak ich uvediete. Neznámy názov skončí kódom 2.
- \--anchor='<json>' (obsah skopírovaný z kotvy log, ktorá sa len zapisuje) sa číta len spolu s --ledger; nedekódovateľný obsah skončí kódom 2.
- \--isolated\[=EXIT\] (sentinel:verify, sentinel:checkpoint) beh preskočí — s kódom 0 alebo zadaným — kým zámok drží iná inštancia.
- Rozsahy: --chunk 1–100 000, --limit ≥ 1 (riadkov spolu naprieč modelmi), --max-findings 0–1 000 000, --batch 1–100 000; dôvody 1–sealing.reason\_max\_length znakov, dôvod odvolania najviac 1 000.
- \--json: sentinel:verify vypíše models, unresolved\_types, scanned, counts, findings, truncated a objekt ledger; sentinel:check vypíše failed a zoznam kontrol, pričom failed rešpektuje --strict.
- sentinel:inspect ponechá hodnoty skryté, pokiaľ nezadáte --show-values (môžu obsahovať osobné údaje); sentinel:key:import číta materiál z --file alebo zo skrytého vstupu, nikdy z argumentu, ktorý by skončil v histórii shellu. Riadok pečate s poškodeným sealed\_at sentinel:inspect stále zobrazí (zapečatené —, stav malformed (sealed\_at), kód 1) namiesto toho, aby skončil chybou.
- sentinel:key:reseal prejde každý kruh, ktorý ukladá kľúče v databáze (--ring pre jeden), riadok po riadku pod zámkom riadku a pred zápisom vypíše ring:kid → "label" — binding, would bind (--dry-run, ktorý nič nezapíše) alebo already bound — s riadiacimi a neviditeľnými znakmi, < a > escapovanými rovnako ako v sentinel:key:list. Je idempotentný a po úspechu bez --dry-run pripomenie nastaviť SENTINEL\_REQUIRE\_BOUND\_LABEL=true.

## Návratové kódy

0 znamená úspech, 1 zlyhanie a 2 neplatný vstup:

| Príkaz | 0 | 1 | 2 |
| --- | --- | --- | --- |
| `sentinel:install` | nainštalované — kľúč vygenerovaný, už existujúci alebo ponechaný na po migrácii (druhé spustenie neuškodí) | generovanie kľúča predvoleného kruhu zlyhalo (napr. jeho algoritmus nie je v allowliste kruhu) | — |
| `sentinel:check` | žiadne zlyhanie (s --strict ani varovanie) | zlyhanie (s --strict aj varovanie) | — |
| `sentinel:verify` | nenašlo sa nič zlyhávajúce (alebo nebolo čo skenovať, s --allow-empty) | zlyhávajúci stav (pozri --fail-on) alebo porušenie denníka | neplatný vstup či konfigurácia, alebo nie je čo skenovať |
| `sentinel:checkpoint` | každé pripojenie má kontrolný bod (pripojenie držané iným behom sa s varovaním preskočí) | kontrolný bod pripojenia zlyhal | neplatné --batch alebo konfigurácia |
| `sentinel:reseal` | nič sa nepreskočilo, nič nezlyhalo | preskočili sa riadky, ktoré nie sú neporušené (vypísané), alebo riadok zlyhal | neznámy model či pečať, neplatná voľba či konfigurácia, potvrdenie zamietnuté politikou |
| `sentinel:seal-missing` | každý kandidát dostal baseline | riadky s históriou, no bez pečate (nahlásené, nikdy nie baseline), alebo riadok zlyhal | chýba --reason, neznámy model či pečať, neplatná voľba |
| `sentinel:inspect` | každá skontrolovaná pečať je neporušená | pečať nie je neporušená alebo riadok neexistuje | neznámy model či pečať, chyba konfigurácie |
| `sentinel:prune` | zmazané (alebo spočítané, s --dry-run) | chyba úložiska | — |
| `sentinel:key:generate` | vygenerovaný | neznámy --algorithm, vlastník nenájdený, odmietnuté (obsadený kid, nepovolený algoritmus, neplatný kid či label) | — |
| `sentinel:key:import` | importovaný | odmietnuté (obsadený kid, kruh len na čítanie, neplatný materiál, súkromný materiál bez --signing) | neplatný vstup (chýba --algorithm, vlastník nenájdený, nečitateľný, prázdny či > 64 KB súbor, bez terminálu aj --file) |
| `sentinel:key:rotate` | rotovaný | neznámy --algorithm, odmietnuté (nepovolený algoritmus, kľúč z vlastného drivera) | — |
| `sentinel:key:revoke` | odvolaný — pri kľúči z konfigurácie sa vypíše riadok SENTINEL\_REVOKED\_KEYS | chýba --reason, neznámy kľúč, odmietnuté | — |
| `sentinel:key:retire` | vyradený — pri kľúči z konfigurácie sa vypíše postup | neznámy kľúč, pečate ho stále používajú (bez --force), odmietnuté | — |
| `sentinel:key:list` | vypísané | neplatný kruh alebo konfigurácia | — |
| `sentinel:key:reseal` | každý kľúč znovu zapečatený alebo už viazaný (s --dry-run: bol by) | kľúč neprejde kontrolou integrity, starý kľúč odmietne require\_bound\_label alebo má label, ktorý nie je platné UTF-8 (každý sa vypíše, žiadny sa znovu nezapečatí); neznámy kruh alebo kruh bez úložiska v databáze | — |

## Plánovanie

Provider zaregistruje údržbu v plánovači, kým je schedule.enabled zapnuté (predvolené), každú úlohu s withoutOverlapping()->onOneServer(). Plný sken je predvolene denný — hodinové skeny celých tabuliek sú pri veľkých tabuľkách tichou záťažou — kým kontrolný bod ostáva každú minútu, pretože jeho interval je okno, v ktorom návrat ostane nepovšimnutý:

| Úloha | Príkaz | Predvolené | Env |
| --- | --- | --- | --- |
| `checkpoint` | sentinel:checkpoint (len pri ledger.enabled) | `everyMinute` | `SENTINEL_SCHEDULE_CHECKPOINT` |
| `verify` | sentinel:verify --allow-empty (+ --ledger, kým je denník zapnutý) | `daily` | `SENTINEL_SCHEDULE_VERIFY` |
| `prune` | sentinel:prune | `daily` | `SENTINEL_SCHEDULE_PRUNE` |

Ak ich chcete zapojiť sami, nastavte SENTINEL\_SCHEDULE=false a pridajte ich do routes/console.php. Ručne zapísané riadky nenechávajte vedľa automatického plánu — withoutOverlapping() bráni súbežným behom, nie dvojitému naplánovaniu.

```php
// routes/console.php
use Illuminate\Support\Facades\Schedule;

Schedule::command('sentinel:checkpoint')->everyMinute()->withoutOverlapping();
Schedule::command('sentinel:verify --ledger')->hourly();
Schedule::command('sentinel:verify --json')->dailyAt('03:00')->emailOutputOnFailure('ops@example.com');
Schedule::command('sentinel:prune')->daily();
```

Sentinel::sealables() vypíše, čo sentinel:verify bez zadaného modelu skenuje: najprv sentinel.models, potom každú triedu s riadkami pečatí alebo záznamami v denníku. Ak nie je čo skenovať, skončí kódom 2, takže chybná konfigurácia nikdy nehlási zelenú. V CI zastaví pipeline pri zisteniach sentinel:verify --check-schema --limit=10000 nad snapshotom zo stagingu a sentinel:check --strict pri akejkoľvek oslabenej záruke.

## Aplikácia bez tabuliek Sentinelu

Aplikácia, ktorá Sentinel dostane len ako závislosť iného balíka, nikdy nepublikuje jeho konfiguráciu ani migrácie — plán je pritom predvolene zapnutý. Preto sa každá plánovaná úloha preskočí, kým neexistuje žiadna z tabuliek, ktoré konfigurácia potrebuje (ten istý zoznam číta kontrola tables):

- Žiadna tabuľka: checkpoint, verify a prune ostanú zaregistrované (schedule:list ich ukáže), no nikdy sa nespustia — schedule:run pre každú odošle ScheduledTaskSkipped. Nič nezlyhá, takže taká aplikácia nepotrebuje SENTINEL\_SCHEDULE=false.
- Existuje aspoň jedna tabuľka: aplikácia úložisko Sentinelu používa a každá úloha beží ako predtým — napoly zmigrovaná inštalácia zlyhá rovnako hlasno ako vždy.
- prune sa preskočí len vtedy, keby čistil tabuľku Sentinelu: s úložiskom cache alebo s úložiskom naviazaným v aplikácii beží bez ohľadu na tabuľky.
- Nedá sa to zistiť (pripojenie zlyhá, nastavenie sa nedá prečítať, úložisko sa nedá zostaviť): úloha sa spustí a zlyhanie nahlási sama.
- Zisťuje sa to len pre úlohu, ktorá je na rade, raz za schedule:run: jeden hasTable pre každú potrebnú tabuľku, kým sa nájde prvá. Migrácia úlohy zapne pri najbližšom schedule:run.

Preskočenie je zámerne tiché, a preto kontrola stavu tichá nie je: kým sa úloha preskakuje, kontrola schedule zlyhá a úlohu pomenuje a php artisan about ukáže auto (checkpoint, verify, prune skipped: no tables). Príkazy, ktoré spustíte sami, a riadky, ktoré si naplánujete ručne, sa nikdy nepreskočia.

## Kontrola stavu

sentinel:check (alebo Sentinel::check()) nahlási na jednom mieste každú chybnú konfiguráciu, ktorá potichu oslabuje záruky. Správy uvádzajú nastavenia, kruhy, tabuľky a triedy — nikdy materiál kľúčov, ich id ani labely:

```php
$report = Sentinel::check();          // HealthReport
$report->failed();                    // any failure (warnings do not fail it)
$report->failures();                  // list<HealthCheck>: name, status, message
$report->warnings();
```

| Kontrola | Zlyhá, keď | Varuje, keď |
| --- | --- | --- |
| `configuration` | Akékoľvek nastavenie alebo profil podpisov je neplatný. | — |
| `signing_keys` | Kruh default, kruh denníka alebo kruh niektorého sealable modelu nevie podpisovať (kým je sealing.auto zapnuté). | To isté na uzle len na overovanie. |
| `app_key` | Kľúče v databáze alebo idempotency.encrypt potrebujú APP\_KEY a ten je prázdny. | — |
| `tables` | Na svojom pripojení chýba tabuľka sentinel\_\*. | — |
| `models` | Sealable model sa neskompiluje alebo jeho tabuľke chýba zapečatený stĺpec. | Nie sú žiadne sealable modely, uložené typy sa už nedajú vyhodnotiť alebo model žije na pripojení, ktoré ledger.connections neuvádza. |
| `anchors` | Nakonfigurovaná kotva je nedostupná alebo kotva cache žije v pamäti procesu či v databáze, ktorú chráni. | Žiadna nie je nakonfigurovaná alebo kotva cache používa predvolený store. |
| `checkpoints` | — | Záznamy denníka staršie než ledger.backlog\_warning\_seconds nemajú kontrolný bod. |
| `schedule` | Plánovanie je zapnuté, no úlohy sa pri každom behu preskočia, lebo neexistuje žiadna z tabuliek Sentinelu (vymenuje úlohy). | Plánovanie je vypnuté a sentinel:checkpoint nie je naplánovaný. |
| `retired_keys` | — | Pečate stále používajú odvolaný, vyradený alebo neznámy kľúč (počty po kruhoch). |
| `stores` | Úložisko idempotencie alebo nonce sa nedá zostaviť. | — |
| `key_envelopes` | require\_bound\_label je zapnuté, kým kľúče v databáze ešte používajú obálku spred 1.2 — neprejdú kontrolou integrity. | Kľúče v databáze ešte používajú obálku spred 1.2 s neviazaným labelom (počty po kruhoch): spustite sentinel:key:reseal, skontrolujte labely a potom nastavte SENTINEL\_REQUIRE\_BOUND\_LABEL=true. |

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/sentinel-for-laravel.md)
