systemd

sistēmas vienības fails, izveidojot pakalpojumu

sistēmas vienības fails, izveidojot pakalpojumu
Pakalpojumu pārvaldība ir kaut kas, par ko jūs pat neaizdomājaties, ikdienā izmantojot savu Linux darbstaciju vai Linux serveri, bet, kad tās nav, jūs to tiešām ienīsiet. Veidojot, piemēram, jaunu servera programmu, kurai jāpalaiž visu diennakti, šī izaicinājuma veikšana bez pakalpojumu pārvaldības ir murgs, kurā jūs pats izveidojat nelielu pakalpojumu sistēmu, kas acīmredzami nebūs tik laba kā pārvaldnieka izstrādātais gadu laikā pilna komanda, vienalga.

Ar saviem pakalpojumiem systemd to visu atvieglo, patiešām atvieglo. Tiklīdz vēlaties, lai kaut kas pārrauga jūsu lietojumprogrammu un to viegli kontrolētu, ir jādodas uz sistēmu, un to es šeit izskaidrošu!

Kur ir Systemd pakalpojumi

Lai pievienotu jaunu pakalpojumu, jums jāatbild uz šo jautājumu. Kā vienmēr sistēmād, tas ir atkarīgs no tā, vai pakalpojums ir paredzēts tikai jūsu lietotājam vai visai sistēmai. Mēs pievērsīsimies tam, kā sistēma darbojas visiem sistēmas pakalpojumiem.

Precīza atrašanās vieta ir atkarīga no tā, kāpēc un kā pakalpojums tika instalēts. Ja pakalpojumu instalē pakotņu pārvaldnieks, tas parasti atrodas mapē / usr / lib / systemd / system. Jūsu izstrādātajai programmatūrai vai programmatūrai, kas pati neatbalsta systemd, pakalpojuma failu ievietosiet mapē / usr / local / lib / systemd / system. Lūdzu, paturiet prātā, ka daži izplatījumi neatbalsta šo mapi mapē / usr / local. Visbeidzot, ja vēlaties konfigurēt esošu systemd pakalpojumu, ceļš ir / etc / systemd / system.

Šajās mapēs varat atrast vairākus failu paplašinājumus, piemēram, *.ligzda, *.mērķis vai *.apkalpošana. Acīmredzot mēs koncentrēsimies uz pēdējo. sistēmas nosaukums faila nosaukumu izmanto kā pakalpojuma nosaukumu, to startējot vai pārtraucot utt. Tātad parasti izmantojamos failu nosaukumos ir tikai burtciparu rakstzīmes, kā arī defises un pasvītras. Izstrādes laikā es iesaku to izveidot savos dokumentos un pēc tam nokopēt uz systemd atrašanās vietu, kas izvairītos no problēmām, ja saglabājat rediģēšanas vidū.

Labi, tāpēc, lūdzu, izveidojiet servisa failu savos dokumentos. Tagad mēs esam gatavi pārskatīt, kā rakstīt šo failu.
[Piezīme: Skatīt iespējamo kļūdu ziņojumu šī emuāra ziņojuma komentāru sadaļā]

[Vienība]
Apraksts = Penguins tīmekļa lietojumprogrammas HTTP serveris (darbojas 8080. portā)
WantedBy = daudzlietotāju.mērķis
 
[Apkalpošana]
Tips = vienkāršs
ExecStart = / usr / bin / python3 / usr / local / bin / pingvīns-web-app / main.py
Restartēt = vienmēr

Faila formāts faktiski ir tuvu ini. Es zinu, ka tas var būt dīvaini, jo ini faili bieži tiek atrasti sistēmā Windows, bet tas tā darbojas. Pakalpojuma fails vispirms tiek sadalīts 2 sadaļās: [Vienība] un [Pakalpojums]. Katrā sadaļā tiek konfigurēts konkrēts sistēmasd aspekts: [Vienība] satur elementus, kurus koplieto visi sistēmasd vienības faili, savukārt [Pakalpojums] ir paredzēts tikai konfigurācijai, kas paredzēta jauna pakalpojuma iestatīšanai.

Pēc tam sadaļa tiek konfigurēta ar tādām īpašībām kā Apraksts = vai ExecStart =. Vērtību no rekvizīta nosaukuma atdala vienādības zīme = bez atstarpes.

Atgriezīsimies pie faila, kas parādīts iepriekš. Tas apraksta pakalpojumu, kas paredzēts, lai palaistu tīmekļa lietotni, kas par pingvīniem rakstīta Python. systemd to restartēs ikreiz, kad process izies un palaidīs serveri pēc servera palaišanas, ja to iespējosit ar komandu systemctl enable. Forši eh?

Bet jūs, iespējams, jūsu nākamā tīmekļa lietotne nav saistīta ar pingvīniem - un tas ir kauns - un tas nav rakstīts Python. Šajā gadījumā vēlaties uzzināt vairāk par iespējamām konfigurācijām.

Systemd Services īpašības

Vispirms pievērsīsimies īpašībām [Unit]:

Apraksts = ir tikai skaidrs apraksts par pakalpojuma darbību. Tas tiek parādīts pakalpojumu sarakstā, pakalpojumu žurnālos, lai jūs vēlētos, lai tas būtu aprakstošs, bet tam vajadzētu palikt vienā rindā un vienā teikumā.

WantedBy = ļauj teikt systemd: kad šī lieta tiek sākta, sāk arī mani. Parasti jums jānorāda mērķa nosaukums. Parasto mērķu piemēri:

  1. daudzlietotāju.mērķis: kad serveris ir kārtībā un ir gatavs palaist komandrindas lietojumprogrammas
  2. grafiski.mērķis: kad GNOME vai KDE ir gatavs
  3. tīkla izveidošana.mērķis: kad serveris ir pareizi savienots ar tīklu

Sākumā ir pietiekami ar šīm [Unit] īpašībām. Tagad apskatīsim [pakalpojumu].

Type = palīdz systemd uzzināt, vai pakalpojums darbojas. Šeit ir izplatīti veidi:

  1. iespējams, visbiežāk tiek izmantots vienkāršais: systemd uzskata jūsu uzsākto procesu par pakalpojumu sniedzēju. Ja process apstājas, tas uzskata, ka arī pakalpojums ir pārtraukts utt.
  2. dakša ir vēlama lietojumprogrammām, kuras tika rakstītas kā serveri, bet bez pakalpojumu pārvaldības sistēmas palīdzības. Būtībā tā sagaida, ka uzsāktais process dakšojas, un šī dakša tiek uzskatīta par galīgo pakalpojuma procesu. Lai būtu precīzāks, jūs varat arī palīdzēt systemd ar PID failu, kur izsekojamā procesa PID raksta palaistā lietojumprogramma.

ExecStart =, iespējams, ir vissvarīgākais pakalpojumam: tas precīzi nosaka, kuru lietojumprogrammu palaist, startējot pakalpojumu. Kā redzat pakalpojumā Penguin, es uzreiz izmantoju / usr / bin / python3, nevis python3. Tas ir tāpēc, ka systemd dokumentācija skaidri iesaka izmantot absolūtos ceļus, lai izvairītos no pārsteigumiem.

Bet tas ir arī cita iemesla dēļ. Citu pakalpojumu vadības sistēma parasti balstās uz Shell skriptiem. Tomēr sistēmas dēļ veiktspējas dēļ pēc noklusējuma nedarbojas čaula. Tātad jūs nevarat tieši nodrošināt čaulas komandu ExecStart =. Tomēr jūs joprojām varat izmantot čaulas skriptu, rīkojoties šādi:

ExecStart = / usr / bin / bash / usr / local / bin / launch-pingvīns-serveris.sh

Nav tik grūti pareizi? Ņemiet vērā, ka, ja jums ir nepieciešams palaist kādu procesu, lai signalizētu par jūsu pakalpojuma pilnīgu pārtraukšanu, pastāv ExecStop =, kā arī ExecReload = pakalpojumu pārlādēšanai.

Restart = ļauj skaidri pateikt, kad pakalpojums ir jārestartē. Šī ir viena no svarīgākajām systemd iezīmēm: tā nodrošina, ka jūsu pakalpojums darbojas tik ilgi, cik vēlaties, tāpēc uzmanīgi pievērsieties šai opcijai.

Restartēt = Nozīme
vienmēr systemd turpinās to restartēt ikreiz, kad tas pārtrauks vai avarēs. Nu, kamēr neizdarīsit systemctl stop service-name.apkalpošana.

Tas ir ideāli piemērots serveriem un tiešsaistes pakalpojumiem, jo ​​jūs vēlaties, lai nederētu bezjēdzīgi restartējumi, nevis pakalpojums manuāli jārestartē bez iemesla.

on-nenormāli Kad servisa process avarē, restartējiet pakalpojumu. Tomēr, ja lietojumprogramma iziet tīri, nepalaidiet to no jauna.

Tas ir vairāk noderīgi tādiem darbiem kā pakalpojumi, kuriem uzdevums ir jādara uzticami, bet nav jādarbojas visu laiku.

uz neveiksmi Līdzīgi kā nenormāli, taču tas arī restartē pakalpojumu, kad lietojumprogramma iziet tīri, bet ar izejas kodu, kas nav nulle. Iziešanas kodi, kas nav nulle, parasti nozīmē kļūdu.
systemd automātiski netiks restartēts.

Parasti noder, lai iegūtu piekļuvi citām systemd funkcijām, piemēram, reģistrēšanai bez restartēšanas funkcijas.

WorkingDirectory = var izpildīt darba direktoriju, palaižot lietojumprogrammu. Vērtībai jābūt absolūtam direktorijas ceļam. Darba katalogs tiek izmantots, ja lietojumprogrammas kodā izmantojat relatīvos ceļus. Mūsu pingvīnu dienestam tas varētu būt:

WorkingDirectory = / srv / pingvīns-tīmekļa lietotne /

Tad drošība ir svarīga, tāpēc jūs parasti nevēlaties palaist pakalpojumu ar root tiesībām. User = un Group = ļauj iestatīt lietotāja vai grupas nosaukumu vai UID / GID, ar kuru tiks palaista jūsu lietojumprogramma. Piemēram:

Lietotājs = pingvīns-tīmeklis
Grupa = pingvīnu tīkls

EnvironmentFile = ir spēcīga opcija. Programmām, kas darbojas kā pakalpojumi, bieži nepieciešama konfigurācija, un vides faili ļauj iestatīt šo konfigurāciju divos veidos:

  1. Lietojumprogramma var tieši nolasīt vides mainīgo.
  2. Bet arī lietojumprogrammai varat iestatīt dažādus komandrindas argumentus, nemainot servisa failu.

Šī faila sintakse ir vienkārša: ierakstāt vides mainīgā nosaukumu, vienādības zīmi = un pēc tam tā vērtību. Tad jūsu vides faila absolūto ceļu ievietojat īpašumā EnvironmentFile.

Tātad piemērs:

EnvironmentFile = / etc / pingvīns-tīmekļa lietotne / vide

Un failā / etc / penguin-web-app / environment ir:

LISTEN_PORT = 8080

Tad mūsu pingvīnu tīmekļa lietotnei būs piekļuve LISTEN_PORT vides mainīgajam un klausīsies gaidīto portu.

Saglabājiet un palaidiet jaunizveidoto Systemd pakalpojumu

Tātad, ja jūs sekojāt manam ieteikumam, jūs rediģējāt servisa failu mājas direktorijā. Kad esat apmierināts, kopējiet šo failu uz / usr / local / lib / systemd / system, pieņemot, ka jūsu izplatīšana atbalsta šo ceļu. Pakalpojuma faila nosaukums būs tā pakalpojuma nosaukums. Šis faila nosaukums ir jābeidz ar .apkalpošana. Piemēram, mūsu pingvīnu serverim tas būtu pingvīns-tīmekļa lietotne.apkalpošana.

Pēc tam jums jāpasaka systemd, ka esat pievienojis jaunu pakalpojumu, tāpēc jums jāievada šī komanda:

$ sudo systemctl daemon-reload

Labi, tagad systemd zina par jūsu jauno pakalpojumu, pieņemot, ka jūsu failā nav sintakses kļūdas. Galu galā tas ir jūsu pirmais fails, tāpēc, visticamāk, jūs kļūdīsities. Šī komanda ir jāizpilda iepriekš katram atjauninājumam jūsu servisa failā.

Laiks sākt pakalpojumu:

$ sudo systemctl start pingvīns-web-app.apkalpošana

Ja tas neizdodas ar kļūdu Unit not found, piemēram, šo:

$ sudo systemctl start pingvīns-tīmekļa lietotne.apkalpošana
Neizdevās palaist pingvīnu-tīmekļa lietotni.serviss: Vienība nav atrasta.

Tas nozīmē, ka jūsu izplatīšana neatbalsta direktoriju vai arī nepareizi nosaucāt servisa failu. Noteikti pārbaudiet.

Ja iestatījāt pakalpojumu ar WantedBy = un vēlaties, lai pakalpojums tiktu palaists automātiski, jums tas jāiespējo ar šo komandu:

$ sudo systemctl iespējo pingvīnu-tīmekļa lietotni.apkalpošana

Foršākā lieta ar pakalpojumu ir tā, ka tas darbojas fonā. Problēma: kā uzzināt, vai tas darbojas pareizi un vai tas darbojas, ja tas darbojas fonā? Neuztraucieties, arī sistēmas komanda domāja par to un sniedza komandu, lai redzētu, vai tā darbojas pareizi, cik daudz laika utt.:

$ systemctl statusa pingvīns-tīmekļa lietotne.apkalpošana

Secinājums

apsveicu! Tagad jūs varat pārvaldīt savas lietojumprogrammas, nerūpējoties par to ikreiz manuāli restartēt. Tagad es iesaku jums izlasīt citu mūsu rakstu par systemd žurnāliem: Master journalctl: izprast systemd žurnālus. Ar to jūs varat izmantot jaudīgo reģistrēšanas sistēmu jaunajā pakalpojumā un izveidot uzticamākus serverus!

Kā tvert un straumēt spēļu sesiju operētājsistēmā Linux
Agrāk spēļu spēlēšana tika uzskatīta tikai par hobiju, taču laika gaitā spēļu industrija piedzīvoja milzīgu tehnoloģiju un spēlētāju skaita pieaugumu....
Labākās spēles, ko spēlēt ar rokas izsekošanu
Oculus Quest nesen iepazīstināja ar lielisku ideju par rokas izsekošanu bez kontrolieriem. Ar arvien lielāku spēļu un aktivitāšu skaitu, kas atbalsta ...
Kā parādīt OSD pārklājumu pilnekrāna Linux lietotnēs un spēlēs
Spēlējot pilnekrāna spēles vai lietojot lietotnes bez atrautības pilnekrāna režīmā, jūs varat izslēgt no attiecīgās sistēmas informācijas, kas redzama...