Pereiti prie pagrindinio turinio

Linux komandos paleidimas fone atsijungus SSH klientui

Šioje pamokoje aptariami įvairūs būdai, kaip užtikrinti, kad komandos veiktų nepriklausomai nuo jūsų SSH sesijos.

Atnaujinta vakar

Linux komandų paleidimas fone ir jų veikimo išlaikymas net atsijungus nuo SSH sesijos yra ypač svarbus ilgai trunkantiems procesams. Jei tai nėra tinkamai sukonfigūruota, nutrūkęs ryšys gali sustabdyti svarbias užduotis, sukelti vėlavimus ar net duomenų praradimą.

nohup

nohup (no hang-up) leidžia komandai tęsti darbą ir po atsijungimo. Šis įrankis pagal numatytuosius nustatymus būna įdiegtas daugumoje Linux distribucijų ir dažniausiai naudojamas scenarijams ar komandoms, kurios turi veikti toliau net po atsijungimo.

Pavyzdžiai

nohup myscript.sh & – paleidžia scenarijų fone, o išvestis išsaugoma faile nohup.out.

nohup python3 script.py & – paleidžia Python scenarijų taip, kad jis veiktų ir toliau.

nohup bash -c 'long_running_command' & – saugiai vykdo ilgai trunkančią komandą.

Kaip grąžinti komandą į priekinį planą

Naudokite ps aux | grep myscript.sh, kad rastumėte proceso ID.

Prisijunkite prie proceso naudodami fg %<job_number>, jei tai buvo foninė užduotis.

Santrauka

nohup yra paprastas ir veiksmingas būdas išlaikyti procesus veikiančius po atsijungimo, tačiau jis neturi sesijų valdymo galimybių.

screen

screen yra terminalo multiplekseris, leidžiantis išlaikyti sesiją aktyvią. Tačiau, skirtingai nei nohup, jis ne visose distribucijose būna įdiegtas pagal numatytuosius nustatymus.

Debian/Ubuntu sistemose Įdiegti galite taip:

sudo apt install screen

RHEL/CentOS:

sudo yum install screen

Šis įrankis ypač naudingas valdant kelias terminalo sesijas ir ilgai trunkančius procesus.

Pavyzdžiai

screen -S mysession – paleidžia vardinę screen sesiją.

screen viduje: mycommand – paleidžia komandą sesijos viduje. Tai gali būti ir scenarijus. Bus sukurta atskira aplinka screen terminale, kuri veiks tame įrenginyje.

Atsijungimas nuo sesijos: Ctrl + A, po to D – atjungia sesiją.

Kaip grąžinti komandą į priekinį planą

Sesijų sąrašą peržiūrėsite su screen -ls.

Iš naujo prisijungsite su screen -r mysession"mysession" yra jūsų suteiktas sesijos pavadinimas.

Santrauka

screen yra galingas įrankis sesijoms išlaikyti ir interaktyviems procesams valdyti, tačiau jam trūksta modernesnių patobulinimų.

tmux

tmux yra modernesnė screen alternatyva, pasižyminti geresniu naudojimo patogumu ir platesnėmis scenarijų automatizavimo galimybėmis. Jis ne visada būna įdiegtas, todėl prireikus įdiekite taip:

sudo apt install tmux

Debian/Ubuntu:

sudo yum install tmux

RHEL/CentOS

tmux naudojamas kelioms terminalo sesijoms valdyti ir darbo efektyvumui pagerinti.

Pavyzdžiai

tmux – paleidžia naują sesiją.

tmux viduje: mycommand – paleidžia komandą arba scenarijų.

Atsijungimas: Ctrl + B, po to D.

Kaip grąžinti komandą į priekinį planą

Sesijų sąrašą peržiūrėsite su tmux list-sessions.

Iš naujo prisijungsite su tmux attach-session -t 0 (0 pakeiskite savo sesijos ID).

Santrauka

tmux užtikrina sesijų tęstinumą, yra patogesnis už screen ir suteikia daugiau galimybių automatizavimui.

disown

disown pašalina užduotis iš shell užduočių lentelės, kad jos nebūtų nutrauktos atsijungus. Ši komanda paprastai jau būna įdiegta daugumoje Linux distribucijų kaip Bash dalis. Ji geriausiai tinka tais atvejais, kai norite, kad foninės užduotys tęstų darbą be papildomų įrankių.

Pavyzdžiai

mycommand & – paleidžia procesą fone.

jobs – parodo foninių užduočių sąrašą.

disown -h %1 – leidžia 1 užduočiai veikti ir po atsijungimo.

Kaip grąžinti komandą į priekinį planą

Proceso ID raskite naudodami ps aux | grep mycommand.

Naudokite kill -CONT <PID>, kad pratęstumėte sustabdytą procesą.

Santrauka

disown yra paprastas ir veiksmingas būdas išlaikyti užduotis veikiančias, tačiau jis neturi išplėstinių valdymo funkcijų.

systemd

systemd yra sistemos ir paslaugų valdytojas, naudojamas pastovioms ir automatiškai iš naujo paleidžiamoms paslaugoms valdyti. Jis būna iš anksto įdiegtas daugumoje šiuolaikinių Linux distribucijų ir puikiai tinka ilgai veikiančioms paslaugoms bei foninėms užduotims valdyti.

Pavyzdžiai

1. Sukurkite paslaugos failą: /etc/systemd/system/myscript.service

2. Įrašykite:

[Unit]
​Description=My Persistent Script
​[Service]
​ExecStart=/path/to/myscript.sh
​Restart=always
​[Install]
​WantedBy=multi-user.target

3. Įjunkite ir paleiskite paslaugą: systemctl enable myscript && systemctl start myscript. Myscript yra jūsų scenarijaus pavadinimas.

Kaip grąžinti komandą į priekinį planą

Būseną patikrinsite su systemctl status myscript.

Žurnalus peržiūrėsite su journalctl -u myscript -f.

Santrauka

systemd yra geriausias pasirinkimas nuolat veikiančioms ir automatiškai iš naujo paleidžiamoms paslaugoms, nes užtikrina patikimumą, tačiau reikalauja papildomos konfigūracijos.

Ar gavote atsakymą į savo klausimą?