Vra jy jouself af hoe om dienste in die agtergrond of op die boot te bestuur?
Die meganisme vir die bestuur en begin van prosesse tydens opstart is verander. Tot RHEL / CentOS 6.x, sou u 'n skrif in /etc/init.d/ geskep het en dit met behulp van chkconfig kon aktiveer, maar dinge verskil van RHEL 7.
Dit word vervang deur systemd, en aangesien dit min of meer die standaardprosesbestuurder by groot Linux-weergawes is, sal die stelseladministrasie wat vertroud is met ander geure tuis voel. In hierdie artikel gaan ons ondersoek wat systemd is, wat die redes vir die oorskakeling was, en hoe om systemd te gebruik om agtergrondprosesse daarmee op te stel, uit te voer en te bestuur.
0.1 Wat is stelsel?
0.2 Waarom RHEL oorgeskakel het na systemd?
0.3 systemd in RHEL7 – Wat verander vir Sysadmins?
0.4 Hoe u diens outomaties kan begin as u af is?
0.5 Meer opsie vir herbegin-logika
0.6 Stel die diens op om met die boot te begin
1 Help! Ek is baie belê in Upstart. ��
Wat is stelsel?
Aangesien elke proses in Linux deursigtig sigbaar is, kan ons kyk waar die stelsel lê. Op my stelsel kry ek die volgende:
wortel 1 0 0 Nov11? 00:01:02 / lib / systemd / systemd – system – deserialize 22
boodskap + 768 1 0 Nov11? 00:05:46 / usr / bin / dbus-daemon – stelsel – adres = systemd: –nofork –nopidfile – systemd-aktivering – alleen logies
wortel 805 1 0 Nov11? 00:10:22 / lib / systemd / systemd-logind
ankush 1132 1 0 Nov11? 00:00:00 / lib / systemd / systemd – gebruiker
ankush 1176 1132 0 Nov11? 00:04:50 / usr / bin / dbus-daemon – sessie – adres = systemd: –nofork –nopidfile – systemd-aktivering – alleen logies
ankush 9772 20029 0 21:11 pts / 6 00:00:00 grep – kleur = auto systemd
systemd + 17298 1 0 Nov19? 00:00:12 / lib / systemd / systemd-opgelos
wortel 17307 1 0 Nov19? 00:00:02 / lib / systemd / systemd-journald
wortel 18182 1 0 Nov19? 00:00:00 / lib / systemd / systemd-udevd
Ek is seker jy het dit dadelik opgemerk. die eerste proses in die lys is van stapel gestuur as die gebruikerswortel en het die pid 1.
Seker genoeg, dit was die eerste proses wat die stelsel met die opstart van stapel gestuur het. Sê hallo vir systemd. ��
Dus, eenvoudig, systemd is die "moeder" -proses wat ander prosesse in die stelsel van stapel stuur, bestuur en beëindig, behalwe die verskaffing van inligting oor hul aantekeninge, lêerstelselstatusse, ens..
'N Opmerking oor die naam. Die naam is inderdaad stelselmatig en nie Stelsel D of iets anders nie. Die 'd' staan ​​vir daemon, 'n standaard Linux-proses wat op die agtergrond werk (loer?) En nie aan enige terminale sessie gekoppel is nie.
Waarom RHEL oorgeskakel het na systemd?
Soos ons reeds bespreek het, is systemd 'n stelsel- en prosesbestuurder, en in RHEL 7 vervang die bekende program Upstart. Waarom het RHEL (Oracle?) Hierdie besluit geneem? Daar is baie goeie redes daarvoor, so kom ons kyk vinnig.
Anders as die SysV-init-program, is systemd in staat om dienste parallel te begin. Die init-program stel hulle daarenteen een vir een bekend. In 'n era waarin selfs mobiele toestelle multi-core CPU's het, is die gebrek aan parallelle initialisering 'n groot afskakel.
Dinamiese (warm) diensbestuur
As u opgemerk het dat USB-aandrywers eksplisiet op vroeëre Fedora-stelsels gemonteer moet word, terwyl hulle outomaties op Ubuntu en soortgelyke verspreidings oop sou wees, is die rede hiervoor. Dit is in staat om lewendige veranderinge in hardeware op te spoor en dienste te beëindig / bekend te stel indien nodig. Sommige kan argumenteer dat dit onnodig is, maar vir baie is alles wat die kognitiewe las verminder, baie welkom.
Uitgestelde diens bekendstelling
systemd maak die opstartye korter omdat dit die bekendstelling van die diens kan uitstel tot wanneer dit eintlik nodig is. 'N Eenvoudige voorbeeld is diensteverwante dienste op die netwerklêerstelsel. As daar geen netwerkskyf beskikbaar is nie, is dit nie sinvol om 'n diens aan die gang te hou nie.
Die parallelle vermoëns van stelsel word oorgedra na kommunikasie tussen prosesse. systemd is in staat om parallelle toegang tot sokke en stelselbus te bied, wat die wagtye van die proses vir kommunikasiehulpbronne aansienlik verminder.
As 'n diens ineenstort, kan systemd dit opspoor en probeer om dit weer te begin. 'N Eenvoudige herbeginsel is meestal al wat nodig is vir 'n aansoek om weer te begin funksioneer, tensy daar meer fundamentele probleme is.
Hoe dit ook al sy, systemd vergemaklik die lewe van 'n sysadmin hier.
systemd in RHEL7 – Wat verander vir Sysadmins?
As u 'n knaende gevoel het dat die stelsel nie die klokke en fluitjies gaan wees nie, is u reg. Daar is 'n paar noemenswaardige onverenigbaarhede wat RHEL-sysadmin kan verras. Kom ons kyk vinnig.
systemd het 'n redelike losbandige erkenning van en ondersteuning vir runlevels. Nie al die aanloopbane word ondersteun nie, en vir sommige teikens kan daar selfs geen wees nie. In sulke gevalle stuur systemd "N" terug as antwoord op die opdraaie op die baan, wat aandui dat dit geen ooreenstemmende snelheid vir hierdie teiken het nie. Alles in ag genome raai Red Hat ons aan om nie (!) Die opdraaie op die afstand te gebruik nie.
Geen pasgemaakte opdragte nie
Hierdie een gaan seermaak. Een groot voordeel met SysV was die vermoë om pasgemaakte opdragte te definieer om beter funksionaliteit te bied vir die bestuur van prosesse. Met systemd is daar nie so 'n opsie nie, en sit jy vas met begin, stop, status, herbegin, ens.
Gesin-alleen en nie-interaktief
systemd hou natuurlik die prosesse wat dit van stapel gestuur het, en slaan hul PID's op. Die uitdaging is egter dat systemd nie prosesse kan hanteer wat nie daardeur geloods is nie. Dit is verder nie moontlik vir 'n gebruiker om met 'n proses wat deur systemd begin is, te kommunikeer nie. Alle uitsette gaan na / dev / null, en stop effektief die hoop wat u sou gehad het om die uitvoer te kry.
Geen konteks nie
Anders as init-dienste, erf diegene wat deur systemd gelanseer word, geen omgewing van enige gebruikers in die stelsel nie. Met ander woorde, inligting soos PATH en ander stelselveranderlikes is nie beskikbaar nie, en elke nuwe proses word in 'n leë konteks van stapel gestuur.
As hierdie lys met beperkinge jou laat huil, is jy nie alleen nie. systemd was 'n polariserende krag in die Linux-wêreld, en googling oor "systemd sucks" sal baie leesstof ontdek. ��
Hoe u diens outomaties kan begin as u af is?
Hier is 'n redelik algemene gebruiksgeval by ontplooiings. Ons moet 'n program dememoniseer in 'n taal wat nie langdurige prosesse het nie: PHP! Gestel ek skryf 'n PHP-script om inkomende websocket-verbindings te hanteer (ons het immers 'n klets-app gebou!) En die skrif word op /home/ankush/chat_server/index.php geplaas.
Aangesien websocketverbindings enige tyd op die bediener kan raak, moet hierdie proses te alle tye wees en inkomende verbindings monitor. Ons kan nie die tradisionele PHP-lewensiklus hier hê nie, want WebSockets is 'n uitstekende verbinding, en as die skrif doodgaan, is die verbinding 'n lys. In elk geval, genoeg op websockets; kom ons kyk hoe ons hierdie stelsel via systemd sal demoneer.
Alle stelseldienste woon in / etc / systemd / system, so kom ons skep 'n lêer daar om ons websocket-bedienerskrip te beskryf. As ons aanvaar dat u as 'n wortelgebruiker aangemeld is.
en dan is die volgende nodig.
Beskrywing = Kletsbedienerdiens
Gebruiker = Ankush
Restart = on-Staak
Stoor die lêer en die volgende stap is om die systemdemon te herlaai
# systemctl daemon-herlaai
en om die diens te begin wat ons so pas geskep het:
# systemctl begin kletsbediener
As u geen foute sien nie, was dit dit!
Kom ons kyk vinnig wat die verskillende riglyne in die lêer beteken:
Die deel [Eenheid] definieer 'n nuwe dienseenheid vir stelseld. In die stelselkwaliteit staan ​​alle dienste bekend as dienseenhede.
Die Na-aanwysing (voorspelbaar) sê aan systemd om hierdie diens eers van stapel te stuur nadat die netwerkdienste van stapel gestuur is (anders, wie sal die laer vlak van socketverbindings doen?).
Die Type = simple sê vir systemd dat hierdie diens nie veronderstel is om homself te vurk nie. Met ander woorde, slegs een geval sal op enige gegewe tydstip gebruik word.
Gebruiker = ankush beteken hierdie diens word uitgevoer as die gebruiker "ankush". Ons kan dit na "wortel" verander, maar dit word uit 'n veiligheidsperspektief nie sterk aanbeveel nie.
ExecStart is, soos u kan sê, die eintlike opdrag om uit te voer.
Herbegin = onafgebroke beteken dat die diens weer moet begin sodra dit gestaak word. In PHP lek langdurige prosesse geheue en ontplof dit uiteindelik, so dit is nodig.
Die WantedBy = -rigting gee aan die stelsel watter doel (dink aan groepe) hierdie diens is. Dit lei daartoe dat simboliese skakels binne daardie teiken geskep word om na die diens te wys.
Oor die algemeen is dit genoeg om agtergrondprosesse te gebruik met behulp van systemd in RHEL 7.
Meer opsie vir herbegin-logika
In die bostaande voorbeeld het ek Restart = on-abort gekonfigureer, maar dit is nie die enigste opsie nie. Daar is meer en kies volgens die vereiste.
on-mislukking – sal weer begin word as onrein uittreksel of sein vertoon word
altyd – herbegin wanneer die sein, skoon of onrein sein gevind word
on-abnormale – onrein sein, waghond of time-out
on-sukses – slegs as dit deur 'n skoon sein of uittrekselkode gestop is
Stel die diens op om met die boot te begin
Sodra u tevrede is met die skrip en seker maak dat dit werk, wil u dit volgende instel sodat dit begin en begin.
Gaan na / etc / systemd / system en voer die onderstaande inskakelopdrag uit (moenie vergeet om die .service-lêernaam te verander met die een wat u het nie)
# systemctl aktiveer chat_server.service
U sal 'n bevestiging sien dat dit 'n simlink geskep het.
Geskep simlink van /etc/systemd/system/multi-user.target.wants/chat_server.service na /etc/systemd/system/chat_server.service.
Herbegin u bediener en u sal sien dat diens begin op die laairuim.
Dit was maklik! Is dit nie?
Help! Ek is baie belê in Upstart. ��
Ek verstaan ​​dat u my vertrou, u saak is die norm eerder as die uitsondering. RHEL gebruik Upstart al so lank dat die skakelaar amper soos 'n verraad voel. Maar hey, stelsels bly verander, en ons moenie oor kleinighede kerm nie. Red Hat erken dat baie mense met ouer weergawes vasstaan ​​en 'n migrasiegids waarna u beslis moet verwys.
Een reddende genade by al hierdie dinge is dat systemd versoenbaar is met die SysV-init-skripte, dus vir die grootste deel sal u eenvoudig u lêers moet skuif en dieselfde dienste kan laat loop.
Stel u belang om meer te wete te kom oor Linux-administrasie en probleemoplossing? Kyk hierna aanlyn kursus.