Hogyan szerezzük vissza az elveszett shellt a reptyr segítségével?

A reptyr egy hasznos eszköz minden Linux felhasználó számára, aki hosszú futású folyamatokkal dolgozik, és szeretné azokat biztonságosan kezelni még akkor is, ha a terminál váratlanul elérhetetlenné válik. Ha gyakran dolgozol távoli szervereken vagy kritikus folyamatokat futtatsz, érdemes megismerkedni ezzel az eszközzel!

Hogyan szerezzük vissza az elveszett shellt a reptyr segítségével?

Előfordult már veled, hogy egy fontos folyamat futott a terminálban, de valamilyen okból elveszítetted a hozzáférést? Például egy rendszerfrissítés (release upgrade) közben bekapcsolt a képernyővédő, és nem tudtad feloldani az ablakot? Vagy véletlenül bezártad az SSH kapcsolatot, de a folyamat még mindig fut a távoli gépen? Ilyenkor jöhet jól a reptyr, amely lehetővé teszi, hogy egy futó folyamatot áthelyezz egy új terminálba.

Mi az a reptyr?

A reptyr egy eszköz, amely lehetővé teszi, hogy egy már futó folyamatot átvigyünk egy másik terminálba. A folyamatok általában egy adott terminálhoz kötődnek, és ha ez a terminál megszűnik vagy elveszítjük a hozzáférést, a folyamat irányítása problémássá válhat. A reptyr ezt a problémát oldja meg úgy, hogy megváltoztatja a célfolyamat vezérlő terminálját.

Hogyan veszhet el egy shell?

Számos helyzet létezik, amikor elveszítheted az aktív shellt:

  • Képernyővédő probléma: Például egy Ubuntu rendszerfrissítés közben a képernyővédő aktiválódik, és nem tudod visszaszerezni a terminált.
  • SSH kapcsolat megszakadása: Ha egy távoli szerveren dolgozol, és megszakad az SSH kapcsolat, az elindított folyamatok ugyan tovább futnak, de nem férsz hozzájuk.
  • Véletlen terminálbezárás: Ha bezárod a terminált, amelyben egy hosszú futású folyamatot indítottál el, a kapcsolat megszűnik.

Hogyan használd a reptyr-t?

  1. Csatlakozz a szerverhez (ha szükséges):

    ssh user@remote-server
  2. Keress egy elveszett folyamatot: Ha tudod, hogy melyik folyamathoz akarsz csatlakozni, használd a ps vagy pgrep parancsot a PID kiderítésére:

    ps aux | grep <folyamat_neve>

    vagy

    pgrep -lf <folyamat_neve>
  3. Indíts egy új terminált és futtasd a következő parancsot:

    reptyr <PID>

    ahol <PID> a visszaszerezni kívánt folyamat azonosítója.

  4. Engedélyezés szükség esetén: Ha a reptyr hibát dob, előfordulhat, hogy engedélyezni kell a ptrace használatát:

    echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

Nem tudom a csomagot telepíteni

  • Csomag forrás URL kiderítése:
    linuxadm:~>apt install --print-uris reptyr
    ...
    'http://hu.archive.ubuntu.com/ubuntu/pool/universe/r/reptyr/reptyr_0.9.0-1_amd64.deb' reptyr_0.9.0-1_amd64.deb 23668 MD5Sum:6000ade71b0b1c32a0bc76ec7389c6bb
  • Csomag letöltése:
    
    linuxadm:~>wget http://hu.archive.ubuntu.com/ubuntu/pool/universe/r/reptyr/reptyr_0.9.0-1_amd64.deb
    ...
    reptyr_0.9.0-1_amd64.deb    100%[==========================================>]  23.11K  --.-KB/s    in 0s      

‘reptyr_0.9.0-1_amd64.deb’ saved [23668/23668]

* Deb kicsomagolása

```bash
linuxadm:~>dpkg --extract reptyr_0.9.0-1_amd64.deb .
  • Bináris rendelkezésre áll
    linuxadm:~>ls -al usr/bin/reptyr 
    -rwxr-xr-x 1 root root 35304 Jun 16  2022 usr/bin/reptyr

Hogyan működik a reptyr?

A reptyr a ptrace rendszerhívást használja, amely lehetővé teszi számára, hogy egy másik folyamathoz csatlakozzon, és módosítsa annak állapotát. A működés lényege:

  • A program elfogja a célfolyamatot és átirányítja annak kimenetét az új terminálba.
  • setsid() segítségével új munkamenetet hoz létre, így a folyamat elszakad az eredeti termináltól.
  • Az ioctl(TIOCSCTTY) hívás segítségével a reptyr új terminált állít be a célfolyamat számára.

Alternatívák és egyéb tippek

Ha előre szeretnél felkészülni hasonló helyzetekre, használhatod a tmux vagy screen programokat is, amelyek lehetővé teszik, hogy a shell-munkameneteket leválaszd és később újracsatlakozz hozzájuk. Ha viszont már elvesztetted a shellt, akkor a reptyr lehet a megmentőd.

Previous Post Next Post