Services op Linux starten zodra uw systeem opstart of opnieuw opstart. Hier leest u hoe u een automatisch startende systemd-service op uw Linux-pc kunt maken.

systemd is de servicemanager voor veel bekende Linux-distributies. Een service is een onderdeel van een programma dat doorgaans op de achtergrond wordt uitgevoerd. Services starten van nature automatisch op zodra het systeem opstart en kunnen zonder toezicht worden uitgevoerd.

Als u een automatisch startende taak of programma moet maken dat telkens wordt uitgevoerd wanneer u uw systeem opstart of opnieuw opstart, kunt u overwegen een nieuwe service te maken. Laten we leren hoe we een nieuwe, aangepaste systemd-service op Linux kunnen maken.

Stap 1: het servicebestand maken

Er zijn een paar stappen nodig om een ​​nieuw systemd-servicebestand te maken. De eerste is het maken van het eenheidsbestand voor de service. Voordat u een servicebestand maakt, moet u de structuur ervan begrijpen.

Laten we het servicebestand bestuderen door een echt, werkend servicebestand van uw Linux-systeem te halen. Hieronder ziet u het servicebestand voor de vmtools daemon-service.

Deze specifieke service is mogelijk niet aanwezig op uw systeem, tenzij u ook Linux op VMware uitvoert met geïnstalleerde VMware-tools. De service in kwestie is niet belangrijk omdat alle services, of liever service-eenheidbestanden, dezelfde basisstructuur hebben met enkele aanpassingen indien nodig.

Alle systemd-servicebestanden moeten uit drie secties bestaan: [Dienst], [Eenheid], En [Installeren], en een paar parameters onder elke sectie. Dit is wat elke sectie bevat en waarom ze belangrijk zijn:

1. Eenheid

De Eenheid sectie bevat belangrijke metadata zoals een beschrijving en afhankelijkheden van de service. Het heeft drie parameters: Beschrijving, Voor, En Na. Zoals hetzelfde suggereert, de Beschrijving parameter biedt enige context van de service en wat deze doet.

De Voor En Na parameters definiëren de voorwaarden waaraan moet worden voldaan om de service uit te voeren. Als u bijvoorbeeld een webserverservice start, wilt u dat deze pas start nadat de netwerkservice online is. Dus je zou de waarde van de instellen Na parameter voor de netwerkservice.

2. Dienst

De Dienst sectie bevat twee verplichte parameters: ExecStart, Type, en een paar andere optionele parameters zoals ExecHerladen, en meer.

ExecStart definieert de opdracht die moet worden uitgevoerd wanneer de service start, terwijl de Type parameter bepaalt het type proces dat moet worden uitgezet.

3. Installeren

Deze sectie en de bijbehorende gegevens worden opgeroepen wanneer u de service in- of uitschakelt met het systemctl-commando.

Het heeft een aantal parameters. Een van de meest voorkomende en noodzakelijke is Gezocht door. De Gezocht door parameter definieert de doeleenheden die moeten starten wanneer de service wordt ingeschakeld. De standaardwaarde is multi-user.target.

De hier vermelde parameters zijn niet de enige parameters die u kunt instellen in een eenheidsbestand. U kunt de volledige lijst met parameters ophalen uit de officiële systemd.exec-documentatie of door in te typen man systeemd.exec in een terminal.

Een systemd service unit-bestand eindigt altijd met een ".dienst" extensie en moet worden opgeslagen in de /etc/systemd/system/ map. Maak het servicebestand met behulp van het aanraakcommando met verhoogde privileges door het vooraf te laten gaan met de sudo commando:

sudo touch /etc/systemd/system/.dienst 

Nu u het servicebestand hebt gemaakt, gaan we het vullen met de benodigde syntaxis om de service geldig en werkend te maken.

Stap 2: het servicebestand configureren

Ter demonstratie maakt u een voorbeeldservice die wordt uitgevoerd Nmap om de poorten op uw machine te scannen en sla de uitvoer elke dertig seconden op in een bestand. Om deze taak uit te voeren, kunt u als volgt het service-eenheidbestand structureren:

[Eenheid]
Description=Demonstratie van aangepaste nmap-service.
Na=netwerk.doel

[Dienst]
Typ=eenvoudig
Gebruiker=root
ExecStart=/usr/bin/nmap -sS -O -oN /home//resultaten.txt localhost
Opnieuw opstarten=altijd
HerstartSec=30

[Installeren]
WantedBy=multi-user.target

Hoewel de hier genoemde parameters eerder zijn uitgelegd, laten we eens kijken hoe ze onze nieuw gecreëerde service beïnvloeden en ook nieuwe onderzoeken die in dit hoofdstuk zijn geïntroduceerd: Herstarten, HerstartSec, En Gebruiker.

Dit is wat de parameters in elke sectie betekenen:

  • Beschrijving: Voor mensen leesbare tekst om de functionaliteiten van de service te beschrijven.
  • Na=netwerk.doel: Dicteren aan systemd waarvan deze service afhankelijk is netwerk.doel en mag pas beginnen na de netwerk.doel dienst is gestart. Let daar op Na wordt niet gebruikt om een ​​directe afhankelijkheidsrelatie tot stand te brengen, het fungeert alleen als trigger.
  • Typ=simpel: Er zijn meerdere soorten diensten. De service in deze demonstratie is echter een regulier proces en daarom verklaren we dit ook zo. U kunt alle verschillende waarden hiervoor vinden op de officiële documentatiepagina die eerder is gelinkt.
  • Herstart=altijd: Dit betekent dat wanneer de service wordt afgesloten, deze altijd opnieuw moet worden opgestart.
  • HerstartSec=30: Hiermee wordt het interval tussen elke start van de service ingesteld op 30 seconden.
  • Gebruiker=root: Dit definieert dat de service wordt uitgevoerd als de rootgebruiker. In dit geval is dit een stap die u moet doen, aangezien Nmap niet kan worden uitgevoerd zonder rootprivileges.
  • ExecStart: Deze richtlijn bevat het absolute pad naar het programma dat moet worden uitgevoerd, samen met alle vereiste vlaggen of argumenten die nodig zijn om het programma correct te laten werken.
  • WantedBy=multi-user.target: Deze parameter in een servicebestand specificeert welk doel de service moet bevatten of "willen". Wanneer een service is opgenomen in een doel, betekent dit dat de service moet starten wanneer het systeem dat doel bereikt tijdens het opstartproces. In dit geval zou de service moeten starten wanneer het systeem in de modus voor meerdere gebruikers gaat. De multi-user modus is een toestand waarin het systeem volledig is opgestart en meerdere gebruikers in staat stellen zich aan te melden en het systeem te gebruiken.

Stap 3: de service inschakelen en starten

Nu u het eenheidsbestand hebt gemaakt, zijn de enige stappen die u nog hoeft te ondernemen om uw service te activeren, deze in te schakelen en uit te voeren. U kunt uw service inschakelen en starten met de opdracht systemctl.

Hier leest u hoe u systemctl gebruikt om de status van uw service in te schakelen, te starten en te controleren:

sudo systemctl inschakelen .dienst
sudo systeemctl start .dienst
sudo systemctl-status .dienst

Nu zou uw aangepaste service actief moeten zijn! In dit geval zou u elke dertig seconden een Nmap-scan moeten zien uitvoeren en de uitvoer wordt opgeslagen in het resultaten.txt bestand in de homedirectory.

Het opzetten van een systemd-service op Linux is eenvoudig!

Hoewel het vanaf het begin opzetten van een aangepaste service in het begin misschien ontmoedigend lijkt, is het een vrij gemakkelijke manier om in te stellen een zelfuitvoerend, onbeheerd proces opzetten om repetitieve taken voor u uit te voeren en uw productiviteit.

In de demoservice zijn we nog maar net aan de oppervlakte gekomen van hoe u een service kunt configureren en instellen. Om alles te weten te komen over hoe u uw service kunt aanpassen, is het raadzaam om de officiële documentatie door te nemen waarnaar in de notitie wordt verwezen.

Als het opzetten en onderhouden van een service een te grote taak voor je lijkt, overweeg dan om een ​​alternatieve manier te bekijken om repetitieve taken op Linux te automatiseren.