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ļā]
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:
- daudzlietotāju.mērķis: kad serveris ir kārtībā un ir gatavs palaist komandrindas lietojumprogrammas
- grafiski.mērķis: kad GNOME vai KDE ir gatavs
- 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:
- 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.
- 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.shNav 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. |
Nē | 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īmeklisGrupa = 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:
- Lietojumprogramma var tieši nolasīt vides mainīgo.
- 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 / videUn failā / etc / penguin-web-app / environment ir:
LISTEN_PORT = 8080Tad 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-reloadLabi, 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šanaJa tas neizdodas ar kļūdu Unit not found, piemēram, šo:
$ sudo systemctl start pingvīns-tīmekļa lietotne.apkalpošanaNeizdevā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šanaForšā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šanaSecinā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!