Tjenester på Linux starter op, så snart dit system starter eller genstarter. Sådan kan du oprette en automatisk startende systemd-tjeneste på din Linux-pc.
systemd er service manager for en masse velkendte Linux-distributioner. En tjeneste er en enhed af et program, der typisk kører i baggrunden. Tjenester starter i sagens natur automatisk op, så snart systemet starter op og kan køre uden opsyn.
Hvis du har brug for at oprette en automatisk startopgave eller et program, der udføres hver gang du starter eller genstarter dit system, kan du overveje at oprette en ny tjeneste. Lad os lære, hvordan du opretter en ny, brugerdefineret systemd service på Linux.
Trin 1: Oprettelse af servicefilen
Der er et par trin påkrævet for at oprette en ny systemd servicefil. Den første af dem er at oprette enhedsfilen til tjenesten. Før du opretter en servicefil, skal du forstå dens struktur.
Lad os studere servicefilen ved at trække en rigtig, fungerende servicefil fra dit Linux-system. Nedenfor kan du se servicefilen for vmtools daemon-tjenesten.
Denne særlige tjeneste er muligvis ikke til stede på dit system, medmindre du også kører Linux på VMware med VMware-værktøjer installeret. Den pågældende tjeneste er ikke vigtig, fordi alle tjenester, eller rettere sagt, serviceenhedsfiler, har den samme basisstruktur med nogle tilpasninger efter behov.
Alle systemd servicefiler skal have tre sektioner: [Service], [Enhed], og [Installere], og et par parametre under hvert afsnit. Her er, hvad hvert afsnit indeholder, og hvorfor de er vigtige:
1. Enhed
Det Enhed afsnittet indeholder vigtige metadata som en beskrivelse og afhængigheder af tjenesten. Den har tre parametre: Beskrivelse, Før, og Efter. Som det samme antyder, er Beskrivelse parameter giver en vis kontekst af tjenesten og hvad den gør.
Det Før og Efter parametre definerer de betingelser, der skal opfyldes for, at tjenesten kan udføres. Hvis du for eksempel starter en webservertjeneste, vil du gerne have, at den først starter, når netværkstjenesten er online. Så du ville indstille værdien af Efter parameter til netværkstjenesten.
2. Service
Det Service afsnittet indeholder to obligatoriske parametre: ExecStart, Type, og et par andre valgfrie parametre som ExecReload, og mere.
ExecStart definerer den kommando, der skal udføres, når tjenesten starter, hvorimod Type parameter bestemmer typen af proces, der skal spawn.
3. Installere
Denne sektion og dens data kaldes hver gang du aktiverer eller deaktiverer tjenesten med systemctl kommandoen.
Den har et par parametre. En af de almindelige og nødvendige er Efterlyst Af. Det Efterlyst Af parameter definerer de målenheder, der skal starte, hver gang tjenesten er aktiveret. Standardværdien er multi-user.target.
De her nævnte parametre er ikke de eneste parametre, du kan indstille i en enhedsfil. Du kan få den fulde liste over parametre fra officiel systemd.exec dokumentation eller ved at skrive ind mand systemd.exec i en terminal.
En systemd service unit fil slutter altid med en ".service"-udvidelse og skal gemmes i /etc/systemd/system/ vejviser. Opret servicefilen ved hjælp af berøringskommandoen med forhøjede privilegier ved at sætte det foran med sudo kommando:
sudo touch /etc/systemd/system/.service
Nu hvor du har oprettet servicefilen, lad os begynde at udfylde den med den nødvendige syntaks for at gøre tjenesten gyldig og fungerende.
Trin 2: Konfiguration af servicefilen
Til demonstration vil du oprette en prøvetjeneste, der udfører Nmap for at scanne portene på din maskine og gem outputtet i en fil hvert tredive sekund. For at opnå denne opgave skal du strukturere serviceenhedsfilen her:
[Enhed]
Description=Demonstration af brugerdefineret nmap-tjeneste.
Efter=netværk.mål[Service]
Type=simpel
Bruger=root
ExecStart=/usr/bin/nmap -sS -O -oN /home//results.txt localhost
Genstart=altid
GenstartSec=30
[Installere]
WantedBy=multi-user.target
Selvom de her nævnte parametre er blevet forklaret tidligere, lad os gennemgå, hvordan de påvirker vores nyoprettede tjeneste og også udforske nye, der introduceres i denne enhed: Genstart, GenstartSek, og Bruger.
Her er, hvad parametrene i hvert afsnit betyder:
- Beskrivelse: Menneskelæselig tekst for at beskrive tjenestens funktionaliteter.
- After=network.target: Dikterer til systemd, som denne service er afhængig af netværk.mål og bør først starte efter netværk.mål service er startet. Noter det Efter bruges ikke til at etablere et direkte afhængighedsforhold, det fungerer blot som en trigger.
- Type=simpel: Der er flere servicetyper. Tjenesten i denne demonstration er dog en regelmæssig proces, og derfor erklærer vi det sådan. Du kan finde alle de forskellige værdier for dette på den officielle dokumentationsside, der er linket til tidligere.
- Genstart=altid: Det betyder, at når tjenesten afsluttes, skal den altid genstarte.
- RestartSec=30: Dette indstiller intervallet mellem hver start af tjenesten til 30 sekunder.
- Bruger=root: Dette definerer, at tjenesten kører som root-brugeren. I dette tilfælde er dette et must-do-trin, da Nmap ikke vil kunne køre uden root-rettigheder.
- ExecStart: Dette direktiv indeholder den absolutte sti til det program, der skal udføres, sammen med alle de nødvendige flag eller argumenter, der er nødvendige for, at programmet kan fungere korrekt.
- WantedBy=multi-user.target: Denne parameter i en servicefil angiver, hvilket mål der skal inkludere eller "ønske" tjenesten. Når en tjeneste er inkluderet i et mål, betyder det, at tjenesten skal starte, når systemet når dette mål under opstartsprocessen. I dette tilfælde bør tjenesten starte, når systemet går ind i flerbrugertilstand. Multibrugertilstanden er en tilstand, hvor systemet er fuldt opstartet og tillader flere brugere at logge på og bruge systemet.
Trin 3: Aktivering og start af tjenesten
Nu hvor du har oprettet enhedsfilen, er de eneste trin tilbage for at aktivere din tjeneste at aktivere og køre den. Du kan aktivere og starte din tjeneste ved hjælp af systemctl-kommandoen.
Sådan bruger du systemctl til at aktivere, starte og kontrollere status for din tjeneste:
sudo systemctl aktivere .service
sudo systemctl start .service
sudo systemctl status .service
Nu skulle din tilpassede service være oppe at køre! I dette tilfælde bør du se en Nmap-scanning, der kører hvert tredive sekund, og outputtet bliver gemt i resultater.txt fil i hjemmemappen.
Opsætning af en systemd service på Linux er nemt!
Selvom opsætning af en brugerdefineret service fra bunden kan virke skræmmende i starten, er det en ret nem måde at indstille op en selvudførende, uovervåget proces for at udføre gentagne opgaver for dig og booste din produktivitet.
I demotjenesten har vi knap nok ridset overfladen af, hvordan du kan konfigurere og opsætte en tjeneste. For at lære alt om, hvordan du kan tilpasse din tjeneste, anbefales det, at du gennemgår den officielle dokumentation, der er linket til i noten.
Hvis opsætning og vedligeholdelse af en tjeneste føles som for meget af en opgave for dig, kan du overveje at tjekke en alternativ måde at automatisere gentagne opgaver på Linux.