5 veidi, kā noturēt attālās SSH sesijas un procesus pēc atvienošanas


SSH vai Secure Shell vienkāršā izteiksmē ir veids, kā persona var attālināti piekļūt citam lietotājam citā sistēmā, bet tikai komandrindā, t.i., ne GUI režīmā. Tehniskākā nozīmē, kad mēs pārsūtām citu lietotāju uz citu sistēmu un izpildām komandas šajā mašīnā, tas faktiski izveido pseidoterminālu un pievieno to pieteicies lietotāja pieteikšanās čaulai.

Kad pēc ilgstošas dīkstāves mēs atteicamies no sesijas vai sesijas noildze, SIGHUP signāls tiek nosūtīts uz pseidotermināli un visiem šajā terminālā palaistajiem darbiem, pat darbiem, kuriem ir vecāku darbi. tiek iniciēti uz pseidotermināla, tiek nosūtīts arī SIGHUP signāls un viņi ir spiesti pārtraukt.

Sesijas pārtraukšanas laikā tiek saglabāti tikai tie darbi, kas ir konfigurēti ignorēt šo signālu. Linux sistēmās mums var būt daudz veidu, kā panākt, lai šie darbi darbotos attālajā serverī vai jebkurā datorā pat pēc lietotāja atteikšanās un sesijas pārtraukšanas.

Izprotiet procesus operētājsistēmā Linux

Normāli procesi ir tie, kuru sesijas ilgums ir noteikts. Tie tiek sākti sesijas laikā kā priekšplāna procesi un beidzas noteiktā laika posmā vai tad, kad sesija tiek pieteikta. Šiem procesiem ir īpašnieks kā jebkuram no derīgajiem sistēmas lietotājiem, ieskaitot root.

Bāreņu procesi ir tie, kuriem sākotnēji bija vecāks, kurš izveidoja procesu, bet pēc kāda laika vecāku process netīši nomira vai avarēja, padarot init par šī procesa vecāku. Šādi procesi ir viņu tiešais vecāks, kurš gaida šos procesus, līdz viņi mirst vai nonāk.

Tie ir daži apzināti bāreņu procesi, tādi procesi, kurus tīši atstāj darboties sistēmā, tiek dēvēti par dēmoniem vai ar nodomu bāreņiem saistīti procesi. Parasti tie ir ilgstoši procesi, kurus pēc tam sāk un pēc tam atvieno no jebkura kontrolējošā termināla, lai tie varētu darboties fonā, līdz tie nav pabeigti, vai beigās izmet kļūdu. Šādu procesu vecāks apzināti nomirst, liekot bērnam izpildīt fonā.

Paņēmieni, kā saglabāt SSH sesijas darbību pēc atvienošanas

Var būt dažādi veidi, kā atstāt ssh sesijas pēc atvienošanas, kā aprakstīts tālāk:

ekrāns ir teksta logu pārvaldnieks operētājsistēmai Linux, kas ļauj lietotājam vienlaikus pārvaldīt vairākas termināla sesijas, pārslēgties starp sesijām, sesiju reģistrēšanu ekrānā notiekošajām sesijām un pat atsākt sesiju jebkurā vēlamajā laikā, neuztraucoties par sesijas reģistrēšanu vai termināls tiek slēgts.

ekrāna sesijas var sākt un pēc tam atvienot no kontrolējošā termināļa, atstājot tās darboties fonā, un pēc tam tās var atsākt jebkurā laikā un pat jebkurā vietā. Jums vienkārši jāsāk sesija ekrānā un, kad vēlaties, atvienojiet to no pseidotermināla (vai kontroltermināla) un atteikšanās. Kad jūtaties, varat atkārtoti pieteikties un atsākt sesiju.

Pēc komandas “ekrāns” ierakstīšanas jūs nokļūsiet jaunā ekrāna sesijā. Šajā sesijā jūs varat izveidot jaunus logus, pārvietoties starp logiem, bloķēt ekrānu un veikt daudz vairāk citu lietu, ko varat darīt parastajā terminālī.

$ screen

Kad ekrāna sesija ir sākusies, jūs varat palaist jebkuru komandu un uzturēt sesiju, atvienojot sesiju.

Tieši tad, kad vēlaties atteikties no attālās sesijas, bet vēlaties saglabāt šajā mašīnā izveidoto sesiju dzīvu, tad tas, kas jums jādara, ir atvienot ekrānu no termināla tā, lai tam nepaliktu vadības terminālis. Pēc tam jūs varat droši atteikties.

Lai atvienotu ekrānu no attālā termināla, vienkārši nospiediet “Ctrl + a” , tūlīt seko “d” , un jūs atgriezīsities pie termināla, redzot ziņojumu, ka ekrāns ir atdalīts. Tagad jūs varat droši atteikties, un jūsu sesija tiks atstāta dzīva.

Ja vēlaties atsākt atvienotu ekrāna sesiju, kuru atstājāt pirms izrakstīšanās, vienkārši vēlreiz piesakieties attālajā terminālā un ierakstiet “screen -r” , ja tiek atvērts tikai viens ekrāns ekrāna sesijas tiek atvērtas, palaidiet “screen -r .

$ screen -r
$ screen -r <pid.tty.host>

Lai uzzinātu vairāk par ekrāna komandu un tās lietošanu, vienkārši sekojiet saitei: Izmantojiet ekrāna komandu, lai pārvaldītu Linux termināļa sesijas

Tmux ir vēl viena programmatūra, kas ir izveidota, lai aizstātu ekrānu. Tam ir lielākā daļa ekrāna iespēju, ar dažām papildu iespējām, kas padara to jaudīgāku nekā ekrāns.

Tas ļauj, izņemot visas ekrāna piedāvātās iespējas, sadalīt rūtis horizontāli vai vertikāli starp vairākiem logiem, mainīt logu rūtis, mainīt sesiju aktivitātes, skriptu lietošanu, izmantojot komandrindas režīmu utt. Pateicoties šīm tmux funkcijām, to gandrīz plaši izmanto gandrīz visi visi Unix izplatījumi un pat tas ir iekļauts OpenBSD bāzes sistēmā.

Kad esat veicis ssh attālajā resursdatorā un ierakstījis tmux, jūs ievadīsit jaunu sesiju ar jaunu logu, kas atveras jūsu priekšā, kurā jūs varat darīt visu, ko jūs darāt parastajā terminālī.

$ tmux

Pēc darbību veikšanas terminālā jūs varat atvienot šo sesiju no kontrolējošā termināla tā, lai tā nonāktu fonā un jūs varētu droši atteikties.

Vai nu jūs varat palaist “tmux detach” , palaižot tmux session, vai arī varat izmantot saīsni (Ctrl + b, tad d) . Pēc tam jūsu pašreizējā sesija tiks atvienota, un jūs atgriezīsities savā terminālā, no kura varēsit droši atteikties.

$ tmux detach

Lai atkārtoti atvērtu sesiju, kuru atvienojāt un atstājāt, kad esat atteicies no sistēmas, vienkārši atkārtoti piesakieties tālvadības mašīnā un ierakstiet “tmux attach”, lai atkal pievienotos slēgtajai sesijai, un tā joprojām būs un darbosies .

$ tmux attach

Lai uzzinātu vairāk par tmux un kā to izmantot, vienkārši sekojiet saitei: Izmantojiet Tmux Terminal Multiplexer, lai pārvaldītu vairākus Linux terminālus.

Ja neesat tik pazīstams ar ekrānu vai tmux, varat izmantot nohup un nosūtīt savu ilgo komandu uz fonu, lai jūs varētu turpināt, kamēr komanda turpinās izpildīt fonā. Pēc tam jūs varat droši atteikties.

Ar komandu nohup mēs iesakām procesam ignorēt SIGHUP signālu, kuru ssh sesija nosūta pēc pārtraukšanas, tādējādi padarot komandu saglabātu pat pēc sesijas atteikšanās. Izstājoties no sesijas, komanda tiek atdalīta no vadības termināļa un turpina darboties fonā kā dēmona process.

Šeit ir vienkāršs scenārijs, kurā mēs esam palaiduši komandu atrast, lai meklētu failus fonā ssh sesijā, izmantojot nohup, pēc kura uzdevums tika nosūtīts uz fonu, nekavējoties atgriežoties, norādot procesa PID un darba ID ([ DARBS] PID) .

# nohup find / -type f $gt; files_in_system.out 2>1 &

Atkārtoti piesakoties, jūs varat pārbaudīt komandas statusu un atgriezt to priekšplānā, izmantojot fg% JOBID , lai uzraudzītu tā virzību utt. Zemāk izeja parāda, ka darbs tika pabeigts, jo tas netiek parādīts, atkārtoti piesakoties, un ir devis parādīto izvadi.

# fg %JOBID

Vēl viens elegants veids, kā ļaut komandai vai atsevišķam uzdevumam darboties fonā un palikt dzīvam pat pēc sesijas atteikšanās vai atvienošanas, ir atteikšanās.

Atteikšana, darbs tiek noņemts no sistēmas procesa darbu saraksta, tāpēc sesijas atvienošanas laikā process tiek pasargāts no nogalināšanas, jo, atsakoties no čaumalas, tas nesaņems SIGHUP.

Šīs metodes trūkums ir tas, ka tā jāizmanto tikai tiem darbiem, kuriem nav nepieciešama Stdin ievade un kuriem nav jāraksta Stdout, ja vien jūs īpaši nenovirza darba ievades un izvades, jo, kad darbs mēģinās mijiedarboties ar Stdin vai stdout, tas apstāsies.

Zemāk mēs nosūtījām ping komandu uz fona, lai ut turpinātu darboties un tiktu noņemts no darba saraksta. Kā redzams, darbs vispirms tika apturēts, pēc kura tas joprojām bija darba sarakstā kā procesa ID: 15368.

$ ping linux-console.net > pingout &
$ jobs -l
$ disown -h %1
$ ps -ef | grep ping

Pēc tam, kad noraidīšanas signāls tika nodots darbam, un tas tika noņemts no darba saraksta, lai gan tas joprojām darbojās fonā. Šis darbs joprojām darbojas, kad atkārtoti piesakāties attālajā serverī, kā redzams zemāk.

$ ps -ef | grep ping

Vēl viena lietderība, lai sasniegtu nepieciešamo uzvedību, ir mierīga. Nohup ir trūkums tādā ziņā, ka procesa procesa grupa paliek nemainīga, tāpēc process, kas darbojas ar nohup, ir neaizsargāts pret jebkuru signālu, kas tiek sūtīts visai procesa grupai (piemēram, Ctrl + C ).

No otras puses, setid izpildāmajam procesam piešķir jaunu procesu grupu, un tādējādi izveidotais process ir pilnīgi jaunizveidotā procesu grupā un to var droši izpildīt, nebaidoties tikt nogalinātam arī pēc sesijas atteikšanās.

Šeit tas parāda, ka process ‘sleep 10m’ ir atdalīts no kontrolējošā termināla kopš tā izveides laika.

$ setsid sleep 10m
$ ps -ef | grep sleep

Tagad, kad atkārtoti piesakāties sesijā, šis process joprojām darbojas.

$ ps -ef | grep [s]leep

Secinājums

Kādus veidus jūs varētu domāt, lai jūsu process darbotos pat pēc atteikšanās no SSH sesijas? Ja ir kāds cits un efektīvs veids, kā jūs varat iedomāties, pieminiet to savos komentāros.