Terminál a procesy
Otvorte Nastavenia → Pluginy a pozrite si plugin terminal, ktorý je súčasťou inštalácie; administrátori prideľujú prístup aj účtom bez oprávnenia administrátora v Používatelia → Povolené pluginy. V chate môže Elowen štyrmi nástrojmi spúšťať príkazy a spravovať procesy a bočný panel chatu zobrazuje časť Procesy. Na nových inštaláciách je plugin zapnutý.
Nástroje a ovládanie procesov
| Nástroj | Čo robí |
|---|---|
Bash |
Spustí príkaz shellu a vráti spojený výstup a návratový kód. |
ListProcesses |
Vypíše procesy na pozadí spustené v tejto konverzácii. |
ProcessOutput |
Prečíta výstup procesu na pozadí alebo počká na jeho dokončenie. |
KillProcess |
Okamžite zastaví jeden z procesov na pozadí tejto konverzácie. |
Spúšťanie na miestnom počítači
Cieľ Váš počítač používa štandardnú prenášanú procesnú reláciu Sandboxu. Bash odoberá jej kanály stdout, stderr, stdin a cwd bez toho, aby spúšťal shell hostiteľa. Úspešné príkazy na popredí si uchovajú hlásený pracovný adresár zvlášť pre každé zariadenie. Odpojenie na popredí, úlohy a služby na pozadí, zber výstupu a rušenie zachovávajú existujúci register procesov a ovládanie. Naviazaná relácia si drží pripustené spojenie; nové spojenia nemôžu staré procesy prevziať. Stratené spojenie je LOCAL_EXECUTION_LOST a odoslaný príkaz bez konečného výsledku má neznámy výsledok. Nepodporované odloženie výstupu na disk sa hlási zvlášť a neprepíše úspešné ukončenie shellu.
Pridelenie prístupu používateľovi
Plugin možno prideliť. Ak ho chcete povoliť účtu bez oprávnenia administrátora:
- Otvorte Používatelia a vyberte účet.
- V časti Povolené pluginy zvoľte Spravovať.
- Vyberte
terminala kliknite na Uložiť zmeny.
Administrátori potrebujú rovnaké oprávnenie ako každý iný účet; nie je automatické. Oprávnenie plugin sprístupní, ale oprávnenia účtu na nástroje môžu jednotlivé nástroje ďalej obmedziť. Plugin sám pred spustením príkazu nežiada potvrdenie. Pravidlo oprávnenia účtu však môže pri príkaze nastaviť, aby sa najprv opýtal. Príkaz, ktorý takto schválite, sa sám nikdy nepresunie na pozadí. Pozrite Používatelia a prístup.
Kde príkazy bežia
Elowen pri každom spustení určí prístup k príkazom cez plugin Sandbox. V konverzácii Projektu príkazy dodržiavajú zásady prístupu daného Projektu a štartujú v koreni Projektu; v spravovanom prostredí Projektu bežia v tomto prostredí. Konverzácia nasmerovaná do iného adresára, napríklad do pracovnej kópie Gitu, beží tam.
Pracovný adresár sa prenáša z jedného úspešného príkazu na popredí na ďalší. Keď príkazu odovzdáte cwd, príkaz v tomto adresári začne. Ak príkaz úspešne skončí, adresár, v ktorom skončil, sa stane pracovným adresárom pre ďalšie volania. Premenné a funkcie shellu sa medzi volaniami neprenášajú.
Ak Sandbox nie je dostupný, spúšťanie v spravovanom Projekte sa odmietne. Explicitný režim priameho hostiteľa smie použiť len vlastník inštancie. Blokujúci reštart vlastného daemona Elowenu a požiadavka na obídenie Sandboxu sa odmietnu.
V CLI mení pracovný adresár konverzácie príkaz /cd. Argument cwd ho pre jeden príkaz prepíše.
Príkazy na popredí
Volanie Bash na popredí čaká najviac timeout milisekúnd. Predvolená hodnota je 120 000 ms a minimum 1 ms. Zvyčajné maximum je 600 000 ms; nastavenia nasadenia môžu zmeniť predvolenú hodnotu aj maximum, maximum však nemožno nastaviť pod predvolenú hodnotu. Nastavenia nasadenia sa čítajú pri štarte Elowenu, preto po zmene Elowen reštartujte.
Keď vo vlastnej interaktívnej konverzácii človeka vyprší lehota, Elowen príkaz zvyčajne presunie na pozadí a vráti jeho ID procesu. Príkaz beží ďalej bez ďalšej lehoty a jeho výstup si môžete vyzdvihnúť neskôr. Nerobí to pri príkaze schválenom v dotaze na oprávnenie, keď je plný limit procesov na pozadí, ani pri zdieľanej miestnosti, delegovanej práci, workflow, naplánovanej úlohe či inej práci bez relácie; také príkazy sa na lehote zastavia. V CLI môžete bežiaci príkaz na popredí odpojiť sami stlačením Ctrl+B. Jeho výstup zostane dostupný cez nástroje pre procesy. Na vlastnej inštalácii môže prevádzkovateľ nastaviť bashDefaultTimeoutMs a bashMaxTimeoutMs v súbore harness.json v adresári inštancie a potom reštartovať daemona. Obe hodnoty sú v milisekundách a musia byť v rozsahu 1..900000, maximum aspoň na úrovni predvolenej hodnoty.
Príkaz, ktorý je len sleep a trvá dve sekundy alebo dlhšie, sa na popredí odmietne, napríklad sleep 2 alebo sleep 5m, pretože ťah len prečkáva. Prácu spustite s run_in_background: true a na jej dokončenie počkajte pomocou ProcessOutput. Príkaz, ktorý robí viac než spí, napríklad sleep 19; tail build.log, povolený je. Kratšie spánky ako dve sekundy sú povolené tiež.
Bash pre odpojené spúšťanie prijíma len run_in_background. Zrušený argument background jeho schéma odmietne.
Procesy na pozadí
Nastavte run_in_background: true a príkaz sa spustí na pozadí. Elowen vráti ID procesu a po jeho dokončení vás upozorní. Na správu použite ListProcesses, ProcessOutput alebo KillProcess. Pre dlho bežiaci server alebo watcher nastavte backgroundMode: "service"; predvolený režim na pozadí je job.
Časť Procesy v bočnom paneli chatu ukazuje bežiace procesy na pozadí a umožňuje prezrieť výstup alebo niektorý zastaviť. Reštart daemona procesy na pozadí ukončí a odstráni ich záznamy, takže server alebo watcher treba po reštarte spustiť znova. Relácia a účet môžu predvolene držať najviac 16 procesov na pozadí; nastaviteľný rozsah je 1–64. Keď je limit plný, ďalší proces nemožno spustiť ani odpojiť. Keď proces skončí, prestane sa do limitu počítať. Ďalší pokus o spustenie procesu na pozadí odstráni skončené procesy zo zoznamu, preto si výstup dokončeného procesu prečítajte skôr, než spustíte ďalší. Naplánované úlohy a pracovníci bez konverzácie procesy na pozadí spustiť ani odpojiť nemôžu.
ProcessOutput vracia nový výstup od posledného čítania; pre uchovaný výstup nastavte all: true. Čaká predvolene až 30 sekúnd, najviac 600 sekúnd. Čítanie, ktorému vyprší čas, proces nezastaví; nastavte block: false, ak chcete nazrieť bez čakania. V CLI môže čakajúce čítanie uvoľniť aj Ctrl+B, proces potom beží ďalej pre neskoršie čítanie. Vyrovnávacia pamäť výstupu drží len posuvný koniec pod limitom výstupu, starší výstup sa teda môže stratiť a výsledok hlási, koľko. Prečítanie dokončeného procesu vráti zostávajúci výstup a vyzdvihne ho, takže jeho ID už nefunguje.
KillProcess okamžite zastaví proces aj jeho sledovaných potomkov, bez čistého ukončenia a vyprázdnenia bufferov, a zahodí vyrovnávaciu pamäť výstupu. Použite ho, len keď je to prijateľné; build alebo migrácia môže zostať nedokončená. Neznáme ID žiadny proces nezastaví.
Výstup a konfigurácia
Vložený výstup je predvolene obmedzený na 60 000 bajtov. Pri dlhom výsledku na popredí si Elowen ponechá začiatok a koniec, oznámi, koľko vynechala, a zachytený výstup uloží zvlášť; vrátenú cestu použite s nástrojom Read. Zachytený výstup je obmedzený na 8 MB a čiastočný záznam hlási, koľko sa zahodilo. Výstup na pozadí drží posuvný koniec do rovnakého limitu. Nastaviteľný rozsah je 10 000–500 000 bajtov.
Konfigurácia platí pre celú inštanciu; nastavenia pre jednotlivé účty neexistujú. Zapnutie pluginu vyžaduje súhlas so zverejňovaním udalostí, ktoré drží stav interaktívneho terminálu synchronizovaný medzi vašimi kartami. Uložením týchto nastavení sa Elowen reštartuje, aby sa zmena prejavila, a zmeny konfigurácie Sandboxu ovplyvnia spustenie ďalšieho príkazu. Nastavenia pre celú inštanciu nájdete v detaile pluginu pod Nastavenia → Pluginy:
| Nastavenie | Kľúč | Predvolené | Rozsah |
|---|---|---|---|
| Limit výstupu | outputCap |
60 000 bajtov | 10 000–500 000 |
| Procesy na pozadí na reláciu a účet | maxBackgroundProcesses |
16 | 1–64 |
V režime Plánovanie sú dostupné ListProcesses a ProcessOutput. Bash zostáva dostupný len podľa pravidiel nedestruktívneho shellu v režime Plánovanie. KillProcess v režime Plánovanie dostupný nie je. Bash a KillProcess môžu zmeniť stav systému. Spúšťanie na pozadí priamo na hostiteľovi vyžaduje Linux.
Zmazanie Projektu
Potvrdené odstránenie Projektu zastaví jeho procesy na pozadí cez zachytený projectRef, aj keď konverzácia medzitým zvolila iný Projekt. Terminal deklaruje provides.projectRemoval a pre interaktívne shelly registruje očakávaný handler registerProjectRemoved. Handler ohradí nové otvorenia, vyprázdni už začatú prípravu, zavrie vybrané PTY a počká na ich verdikty channel.closed, vrátane shellov už zavretých z doku. Neznáme ukončenie spôsobí, že čistenie zlyhá; súbory sa nesmú zmazať, kým tento hook neuspeje. Hook nikdy nevyberá ani nemaže cesty v súborovom systéme.
Interaktívne terminály
V Projektoch vyberte na karte Projektu ikonu terminálu a otvorte interaktívny shell. Okno používa vaše nastavenia vzhľadu v Účet → Terminál. Minimalizujte ho alebo stlačte Escape a shell beží ďalej v doku; kliknutím na jeho popísanú ikonu ho obnovíte. Druhý terminál v tom istom Projekte má očíslovaný popis. Voľbou X shell okamžite ukončíte. Po ukončení shellu otvorí Nový terminál v tomto Projekte ďalší.
Prihlásená osoba na webe môže v Projekte otvoriť interaktívny shell a písať doň. Platí preň rovnaké rozhodnutie Sandboxu ako pre príkaz: terminál prevádzkovateľa beží priamo na hostiteľovi, terminál kohokoľvek iného v obmedzenom prostredí s domovským adresárom jeho účtu (HOME) a Izolovať príkazy bežných účtov rozhoduje pre rovnakých ľudí, pre ktorých rozhoduje pri príkazoch. Terminál spravovaného Projektu beží v jeho spustenom prostredí a štartuje v adresári Projektu. Ak je prostredie zastavené, najprv ho spustite v časti Prostredia daného Projektu. Terminály na hostiteľovi aj v spravovanom prostredí používajú Bash s ovládaním úloh, vrátane Ctrl+C na prerušenie príkazu na popredí.
Pri Projekte typu Váš počítač musí byť počítač online a jeho klient aktuálny. Linuxové počítače potrebujú /usr/bin/python3; Windows používajú PowerShell daného počítača v termináli ConPTY a vyžadujú build Windows 18309 alebo novší. Iné operačné systémy počítača interaktívny terminál otvoriť nemôžu. Shell používa prihlásenie Gitu a GitHub CLI z daného počítača. Odpojený alebo zastaraný klient sa hlási v okne terminálu; pred ďalším pokusom ho aktualizujte alebo znova pripojte. Opätovné pripojenie počítača starý terminál ukončí, preto potom otvorte nový.
Prihlasovací údaj účtu ku GitHubu je v izolovaných shelloch na hostiteľovi aj v spravovaných shelloch k dispozícii podľa rovnakých pravidiel ako pri Bash, s výstupom údajov začierneným. Shell priamo na hostiteľovi tento údaj nedostane.
Terminál vyžaduje prihlásenú webovú reláciu. Osobný API token aj vlastný údaj agenta sa odmietnu, pretože ani jeden nie je človek pri klávesnici. Účet môže mať otvorené štyri terminály naraz a inštancia 32 a terminál možno otvoriť len v Projekte, ktorého je účet členom. Strata členstva alebo oprávnenia k pluginu terminál ukončí.
Minimalizácia nechá terminál pripojený a bežiaci. Po obnovení stránky alebo strate spojenia prehliadača čaká až tridsať minút na váš návrat; potom sa shell ukončí. Obnovenie stránky vráti až 1 MiB posledného výstupu terminálu. Programy na celú obrazovku niekedy potrebujú zmeniť veľkosť okna, aby sa prekreslili. Otvorenie rovnakého terminálu v druhom okne ho prevezme a staršie okno ponúkne vziať si ho späť. Zavretím terminálu sa shell a všetko, čo spustil, okamžite ukončí, bez otázky. Terminály neprežijú reštart daemona, rovnako ako procesy na pozadí vyššie.