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.
