Systemd init-systemet er nå en del av nesten alle Linux-distribusjoner. Som administrator eller utvikler lager du tjenester som systemd kan administrere. For eksempel, hvis du vil starte tjenester ved oppstart eller vil kontrollere dem manuelt, kan det gjøres gjennom en tilpasset tjenestefil.
I denne opplæringen vil jeg gå gjennom hvordan du lager en systemd servicefil på Linux.
Hva er en tjenestefil
Før vi går videre, la oss forstå hva en systemd-tjenestefil er og hvordan den er opprettet på Linux.
En systemd-tjenestefil inneholder instruksjoner satt for systemd for å administrere tjenesten. Den inneholder vanligvis tre seksjoner:
- Enhet
- Service
- Installere
De Enhet delen inneholder grunnleggende informasjon om tjenesten som en kort beskrivelse, dokumentasjonssider og en vei til avhengigheter. De Installere delen er valgfri, men vanligvis administrerer den i hvilken systemtilstand tjenesten skal aktiveres.
De Service seksjonen er normalt klemt mellom enheten og installasjonsseksjonen. Den inneholder først og fremst typen tjeneste og banen til de kjørbare filene som i hovedsak er kommandoer som skal utføres ved påkalling av tjenesten av systemd.
Her er hvordan en typisk tjenestefilstruktur ser ut.
[ Enhet ]
Direktiv1 =instruksjon
Direktiv2 =instruksjon
…
[ Service ]
Direktiv1 =instruksjon
Direktiv2 =instruksjon
…
[ Installere ]
Direktiv1 =instruksjon
Direktiv2 =instruksjon
…
Her er direktiver parametere som tar sine respektive input. For eksempel Beskrivelse direktivet tar en streng av navnet på tjenesten. På lignende måte, ExecStart tar hensyn til den fullstendige banen til den kjørbare filen.
En typisk tjenestefil av ssh.service er gitt nedenfor.
Hvordan lage en tjenestefil
For å lage en systemtjeneste er det nødvendig å forstå de viktigste direktivene. I denne veiledningen vil jeg dekke de essensielle direktivene som kan hjelpe deg med å lage en fullt funksjonell tjenestefil.
Å lage en tjenestefil innebærer flere trinn, la oss begynne med å lage skriptfilen.
Merk: For å fortsette med metoden nevnt nedenfor, må du ha root-privilegier.
1. Opprette et skript
Det første trinnet involverer opprettelsen av koden som vil bli utført når tjenesten starter sin drift. For denne opplæringen lager jeg et bash-skript som vil lagre oppetiden til Linux-systemet og minnebruken.
La oss lage et skript i gjeldende katalog med navnet på myscript.sh ved hjelp av nano-editor.
sudo nano myscript.shLegg nå til skriptet gitt nedenfor i filen og lagre det ved å trykke ctrl+x og så og .
#!/bin/bashekko '>>Her er oppetiden til systemet ditt<<' > hjem / han selv / minfil.txt
oppetid >> hjem / han selv / minfil.txt
ekko '>>Her er minnebruken til systemet ditt<<' >> / hjem / han selv / minfil.txt
gratis -m >> hjem / han selv / minfil.txt
sove 60
Manuset inneholder et par ekkostrenger og oppetid og gratis kommandoer.
De oppetid kommando på Linux brukes til å skrive ut hvor lenge et system har kjørt, og hvor mange brukere som er koblet til med en gjennomsnittlig systembelastning på siste 1, 5 og 15 minutter.
De gratis kommandoen brukes til å skrive ut minnebruken til systemet, mens -m flagget brukes til å skrive ut utdataene i MBs .
For å lagre informasjon i en tekstfil bruker vi spesielle operatører kalt omdirigeringsoperatører. De > operator brukes til å sette inn tekst i den nevnte tekstfilen. Men hvis filen ikke allerede eksisterer, vil den bli opprettet. Mens >> operator brukes til å legge til teksten i filen. De sove kommandoen brukes til å opprettholde tjenestens aktivitet i minimum ett minutt.
Gjør nå skriptet kjørbart ved å gi de nødvendige tillatelsene.
sudo chmod +x myscript.shSkriptet har nå kjøringstillatelsen, la oss fortsette til neste seksjon.
Merk: For å gjøre tjenestefilen feilfri, bruk den absolutte banen til filen i bash-skriptet.
2. Opprette en .service-fil
Deretter oppretter du en tjenestefil med .service Utvidelse. Tjenestefilen må opprettes i /etc/systemd/system katalog. Naviger først til denne katalogen ved å bruke cd kommando.
cd / etc / systemd / systemDu kan opprette tjenestefilen i en hvilken som helst katalog, og senere flytte den filen til denne katalogen.
Jeg lager en tjenestefil med minservice.service Navn.
sudo nano minservice.serviceLegg nå til følgende linjer i filen.
[ Enhet ]Beskrivelse =Min tjeneste
[ Service ]
Type = enkelt
ExecStart = / bin / bash / hjem / han selv / script.sh
Omstart = ved feil
[ Installere ]
Etterlyst Av =multi-user.target
Noter det [Enhet], [Tjeneste], og [Installere] er skiller mellom store og små bokstaver . Tjenestefilen vil ikke fungere hvis noen av dem er nevnt feil, for eksempel [UNIT] eller [SERVICE].
Tjenestenavnet er spesifisert som Min tjeneste i Beskrivelse direktivet til [Enhet] seksjon.
De Type av tjenesten er enkel i [Service] seksjon, som er standardtypen. Forking , et skudd , gi beskjed , dbus , og inaktiv er noen av de andre typene.
Hvis du ønsker å gjøre tjenesten brukerspesifikk, må du Bruker direktiv kan også brukes med brukernavnet til brukeren. Bruk av dette direktivet vil gjøre tjenestebrukerens tillatelse avhengig.
Mens ExecStart direktivet inneholder hele banen til den kjørbare filen. I eksemplet ovenfor, skriptfilen myscript.sh er lagret i /home/sam/ katalog. Dette direktivet administrerer faktisk hva som skal utføres når en tjeneste påkalles av systemd. Hvis kommandoens fullstendige bane ikke er spesifisert, vil den automatisk løses for å fikse absolutte baner som f.eks /usr/local/bin , /usr/bin/, og /bin . Det er helt greit å bruke det kjørbare navnet så lenge de er i standard kommandokataloger, men nevne den absolutte banen ellers. Merk at flere kommandoer også kan brukes som er atskilt med semikolon (;).
De [Installere] delen er valgfri; den indikerer imidlertid hvordan tjenesten er aktivert. De Etterlyst Av direktiv tar målfilene på kjørenivå som parametere. Ulike målfiler indikerte forskjellige kjørenivåer av systemet som f.eks strøm av , redde , flerbruker , grafisk , og starte på nytt .
De multi-user.target betyr at tjenesten vil bli aktivert når systemet er i en tilstand for å tillate flerbruker ikke-grafiske sesjoner.
3. Aktivering av tjenesten
For å aktivere tjenesten, last først systemkonfigurasjonene på nytt ved å bruke systemctl nytte.
sudo systemctl daemon-reloadDeretter aktiverer du tjenesten igjen ved å bruke systemctl kommando med muliggjøre .
sudo systemctl muliggjøre minservice.serviceFor å bekrefte, sjekk statusen til tjenesten ved å bruke systemctl-status kommando.
Tjenesten kjører.
La oss nå lese tekstfilen minfil.txt tjenesten opprettet i /hjem katalog.
Hvordan lage en Systemd-tjenestefil for normal bruker
Prosedyren for å lage tjenestefilen for en vanlig bruker ligner på metoden for å lage en tjenestefil av administratoren. Imidlertid er katalogen for å lagre tjenestefilen for vanlige brukere annerledes. Vanlige brukere må plassere tjenestefilene sine i ~/.config/systemd/user . Denne katalogen må opprettes ved hjelp av mkdir kommando.
mkdir ~ / .config / systemd / brukerFor å aktivere tjenesten av en vanlig bruker -bruker kommandoen er satt inn med systemctl i stedet for sudo .
systemctl --bruker daemon-reloadsystemctl --bruker muliggjøre SERVICE-NAME.service
systemctl --bruker status SERVICE-NAME.service
De -bruker alternativet brukes til å administrere brukerens systemd service-filer.
Slik fjerner du tjenestefil
For å fjerne tjenestefilen må tjenesten først stoppes.
sudo systemctl stoppe SERVICE-NAME.serviceSjekk status ved hjelp av systemctl-status kommando for å vite om tjenesten er stoppet eller ikke. Fjern deretter tjenestefilen ved å bruke rm kommando.
sudo rm / etc / systemd / system / SERVICE-NAME.serviceLast nå inn på nytt systemd konfigurasjon.
sudo systemctl daemon-reloadKonklusjon
Den tilpassede systemtjenesten er fordelaktig i ulike scenarier. I denne veiledningen lærte vi hvordan du oppretter en tilpasset systemd servicefil for en systemadministrator og hvordan vanlige brukere kan opprette en servicefil. Videre ser vi også prosedyren for å fjerne tjenestefilen.