Essentials van Systemd: Werken met services, units en het journaal

Introductie

In de afgelopen jaren zijn Linux-distributies steeds meer overgestapt van andere init-systemen naar systemd. Het systemd-pakket met tools biedt een snel en flexibel initialisatiemodel voor het beheren van een volledige machine vanaf het opstarten.

In deze handleiding geven we u een snel overzicht van de belangrijkste commando’s die u moet kennen voor het beheren van een systemd-geactiveerde server. Deze moeten werken op elke server die systemd implementeert (elke OS-versie op of boven Ubuntu 15.04, Debian 8, CentOS 7, Fedora 15). Laten we beginnen.

Basis Unitbeheer

Het basisobject dat systemd beheert en waarmee het werkt, is een “unit”. Units kunnen van veel types zijn, maar het meest voorkomende type is een “service” (aangeduid door een eenheidbestand met de extensie .service). Om services te beheren op een systemd-geactiveerde server, is ons belangrijkste gereedschap het systemctl-commando.

Alle normale init-systeemcommando’s hebben equivalent acties met het systemctl-commando. We zullen de nginx.service-unit gebruiken om dit te demonstreren (u moet Nginx installeren met uw pakketbeheerder om dit servicebestand te verkrijgen).

Bijvoorbeeld, we kunnen de service starten door te typen:

  1. sudo systemctl start nginx.service

We kunnen het opnieuw stoppen door te typen:

  1. sudo systemctl stop nginx.service

Om de service te herstarten, kunnen we typen:

  1. sudo systemctl restart nginx.service

Om te proberen de service opnieuw te laden zonder de normale functionaliteit te onderbreken, kunnen we typen:

  1. sudo systemctl reload nginx.service

Units in- of uitschakelen

Standaard worden de meeste systemd-unitbestanden niet automatisch gestart bij het opstarten. Om deze functionaliteit te configureren, moet je de unit ‘inschakelen’. Hierdoor wordt het gekoppeld aan een bepaald opstart ‘doel’, waardoor het wordt geactiveerd wanneer dat doel wordt gestart.

Om een service automatisch te laten starten bij het opstarten, typ:

  1. sudo systemctl enable nginx.service

Als je de service weer wilt uitschakelen, typ:

  1. sudo systemctl disable nginx.service

Een overzicht krijgen van de systeemstatus

Er is veel informatie die we kunnen halen uit een systemd-server om een overzicht te krijgen van de systeemstatus.

Om bijvoorbeeld alle unitbestanden te krijgen die systemd als ‘actief’ heeft vermeld, typ (je kunt eigenlijk de list-units weglaten omdat dit het standaardgedrag van systemctl is):

  1. systemctl list-units

Om alle eenheden op te sommen die systemd heeft geladen of heeft geprobeerd in het geheugen te laden, inclusief diegene die momenteel niet actief zijn, voegt u de --all schakelaar toe:

  1. systemctl list-units --all

Om alle eenheden geïnstalleerd op het systeem weer te geven, inclusief diegene die systemd niet heeft geprobeerd in het geheugen te laden, typt u:

  1. systemctl list-unit-files

Basis Log Informatie Bekijken

A systemd component called journald collects and manages journal entries from all parts of the system. This is basically log information from applications and the kernel.

Om alle logboekvermeldingen te zien, te beginnen bij de oudste vermelding, typt u:

  1. journalctl

Standaard toont dit u vermeldingen van de huidige en vorige opstarts als journald is geconfigureerd om vorige opstartrecords op te slaan. Sommige distributies schakelen dit standaard in, terwijl andere dat niet doen (om dit in te schakelen, bewerk het bestand /etc/systemd/journald.conf en stel de Storage= optie in op “persistent”, of maak de persistente directory aan door sudo mkdir -p /var/log/journal te typen).

Als u alleen de logboekvermeldingen van de huidige opstart wilt zien, voegt u de -b vlag toe:

  1. journalctl -b

Om alleen kernelberichten te zien, zoals die typisch worden vertegenwoordigd door dmesg, kunt u de -k vlag gebruiken:

  1. journalctl -k

Nogmaals, u kunt dit beperken tot alleen de huidige opstart door de -b vlag toe te voegen:

  1. journalctl -k -b

Opvragen van eenheidstoestanden en logs

Terwijl de bovenstaande commando’s toegang gaven tot de algemene systeemstatus, kunt u ook informatie krijgen over de status van afzonderlijke eenheden.

Om een overzicht te zien van de huidige status van een eenheid, kunt u de status-optie gebruiken met het systemctl-commando. Dit laat zien of de eenheid actief is, informatie over het proces en de laatste logboekvermeldingen:

  1. systemctl status nginx.service

Om alle logboekvermeldingen voor de betreffende eenheid te zien, geeft u de -u-optie met de eenheidsnaam aan het journalctl-commando:

  1. journalctl -u nginx.service

Zoals altijd kunt u de vermeldingen beperken tot de huidige opstart door de -b-vlag toe te voegen:

  1. journalctl -b -u nginx.service

Inspecteren van eenheden en eenheidsbestanden

Op dit moment weet u hoe u de toestand van een eenheid kunt wijzigen door deze te starten of te stoppen, en u weet hoe u toestands- en logboekinformatie kunt bekijken om een idee te krijgen van wat er met het proces gebeurt. We hebben echter nog niet gezien hoe we andere aspecten van eenheden en eenheidsbestanden kunnen inspecteren.

A unit file contains the parameters that systemd uses to manage and run a unit. To see the full contents of a unit file, type:

  1. systemctl cat nginx.service

Om de afhankelijkheidsstructuur van een eenheid te zien (welke eenheden systemd zal proberen te activeren bij het starten van de eenheid), typt u:

  1. systemctl list-dependencies nginx.service

Dit zal de afhankelijke eenheden tonen, met doel eenheden recursief uitgebreid. Om alle afhankelijke eenheden recursief uit te breiden, geef de --alle vlag door:

  1. systemctl list-dependencies --all nginx.service

Tenslotte, om de details op laag niveau van de instellingen van de eenheid op het systeem te zien, kunt u de tonen optie gebruiken:

  1. systemctl show nginx.service

Dit zal u de waarde geven van elk parameter dat wordt beheerd door systemd.

Unit-bestanden aanpassen

Als u een wijziging moet aanbrengen in een eenheidsbestand, staat systemd u toe om wijzigingen aan te brengen vanuit het systemctl commando zelf zodat u niet naar de werkelijke schijflocatie hoeft te gaan.

Om een eenheidsbestandfragment toe te voegen, wat kan worden gebruikt om instellingen in het standaard eenheidsbestand toe te voegen of te overschrijven, roept u eenvoudigweg de bewerken optie aan op de eenheid:

  1. sudo systemctl edit nginx.service

Als u de hele inhoud van het eenheidsbestand wilt wijzigen in plaats van een fragment te maken, geef dan de --volledig vlag door:

  1. sudo systemctl edit --full nginx.service

Na het wijzigen van een eenheidsbestand, moet u het systemd proces zelf opnieuw laden om uw wijzigingen op te pikken:

  1. sudo systemctl daemon-reload

Gebruik van Doelen (Runlevels)

Een andere functie van een initialisatiesysteem is om de server zelf tussen verschillende toestanden over te schakelen. Traditionele initialisatiesystemen verwijzen typisch naar deze als “runlevels”, waardoor het systeem slechts in één runlevel tegelijk kan zijn.

In systemd, worden in plaats daarvan “doelen” gebruikt. Doelen zijn in feite synchronisatiepunten die de server kan gebruiken om de server in een specifieke toestand te brengen. Service- en andere eenheidsbestanden kunnen aan een doel worden gekoppeld en meerdere doelen kunnen tegelijk actief zijn.

Om alle beschikbare doelen op uw systeem te zien, typt u:

  1. systemctl list-unit-files --type=target

Om het standaarddoel te bekijken dat systemd probeert te bereiken bij het opstarten (dat op zijn beurt alle eenheidsbestanden start die de afhankelijkheidsstructuur van dat doel vormen), typt u:

  1. systemctl get-default

U kunt het standaarddoel dat bij het opstarten wordt gebruikt wijzigen door de set-default-optie te gebruiken:

  1. sudo systemctl set-default multi-user.target

Om te zien welke eenheden aan een doel zijn gekoppeld, kunt u typen:

  1. systemctl list-dependencies multi-user.target

U kunt de systeemtoestand wijzigen om over te schakelen tussen doelen met de isolate-optie. Hiermee worden alle eenheden gestopt die niet aan het gespecificeerde doel zijn gekoppeld. Zorg ervoor dat het doel dat u isoleert geen essentiële services stopt:

  1. sudo systemctl isolate multi-user.target

Het stoppen of herstarten van de server

Voor sommige van de belangrijkste toestanden waarnaar een systeem kan overgaan, zijn snelkoppelingen beschikbaar. Zo kunt u bijvoorbeeld om uw server uit te schakelen, typen:

  1. sudo systemctl poweroff

Als u het systeem liever opnieuw wilt opstarten, kunt u dat doen door het volgende in te typen:

  1. sudo systemctl reboot

U kunt opstarten in reddingsmodus door het volgende in te typen:

  1. sudo systemctl rescue

Merk op dat de meeste besturingssystemen traditionele aliassen bevatten voor deze bewerkingen, zodat u eenvoudig sudo poweroff of sudo reboot kunt typen zonder systemctl. Dit is echter niet gegarandeerd op alle systemen te zijn ingesteld.

Volgende stappen

Op dit moment zou u de basisprincipes moeten kennen van het beheren van een server die systemd gebruikt. Er is echter nog veel meer te leren naarmate uw behoeften toenemen. Hieronder vindt u links naar handleidingen met meer gedetailleerde informatie over enkele van de componenten die we in deze gids hebben besproken:

Door te leren hoe u de sterke punten van uw init-systeem kunt benutten, kunt u de status van uw machines beheren en uw services en processen gemakkelijker beheren.

Source:
https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal