Här ska vi titta på hur man skapar en systemd-tjänst av en egen demon. Vi kommer börja med att skapa ett litet skalskript som vi kommer att använda som exempeldemon. Därefter skapar vi systemd-tjänsten för demonen, samt aktiverar och startar den med systemctl.

Demon

Exempeldemonen

Exempeldemonen kommer bara vara ett enkelt skalskript som skriver tid och datum till en fil i /tmp-katalogen var 20:e sekund.

Spara nedanstående skript i /usr/sbin/my-own-daemon.sh. Eftersom vi sparar den i /usr/sbin/ måste du göra detta som root.

#!/bin/bash
PATH="/bin:/sbin:/usr/bin:/usr/sbin"

while true
do
    echo "Aktuellt klockslag: $(date +'%Y-%m-%d %H:%M:%S')" \
        > /tmp/klockan_ar.txt
    sleep 20
done

Efter att du sparat filen i /usr/sbin/my-own-daemon.sh behöver vi göra den körbar. Gör detta med:

#> chmod +x /usr/sbin/my-own-daemon.sh

Nu är demonen klar och det är dags att skapa systemd-tjänsten.

Systemd-tjänsten

Att skapa en grundläggande systemd-tjänst är faktiskt mycket enklare än vad man kan tro. På bara sju rader har vi en fullt fungerande tjänst. Spara nedanstående kod i /etc/systemd/system/my-own-daemon.service

[Unit]
Description=Min första exempeldemon
[Service]
ExecStart=/usr/sbin/my-own-daemon.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target

Här har vi specificerat en beskrivning för demonen i fältet Description. Vi har också specificerat skriptet som denna tjänsten ska köra med ExecStart. Utöver detta har vi angett att demonen ska startas om ifall den kraschar med Restart=on-failure. Denna raden är inte nödvändig för att få en fungerande tjänst, men är ett bra tillägg – särskilt för viktiga demoner. Och sist men inte minst har vi specificerat vilken runlevel – eller rättare sagt target på systemd-språk – som ska köra denna demonen.

Aktivera och starta tjänsten

Nu har det blivit dags att testköra tjänsten. Om vi vill att demonen ska startas varje gång datorn startas aktiverar vi tjänsten med nedanstående kommando (som root):

ANNONS FÖR VÅRA EGNA BÖCKER Demonerna på internet

#> systemctl enable my-own-daemon
Created symlink /etc/systemd/system/multi-user.target.wants/my-own-daemon.service → /etc/systemd/system/my-own-daemon.service.

Nu testar vi att starta tjänsten.

#> systemctl start my-own-daemon

Nu kan vi passa på att även kontrollera om demonen verkligen körs med status-kommandot.

#> systemctl status my-own-daemon
● my-own-daemon.service - Min första exempeldemon
   Loaded: loaded (/etc/systemd/system/my-own-daemon.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-05-12 04:08:21 CEST; 18s ago
 Main PID: 26613 (my-own-daemon.s)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/my-own-daemon.service
           ├─26613 /bin/bash /usr/sbin/my-own-daemon.sh
           └─26615 sleep 20

maj 12 04:08:21 red-dwarf systemd[1]: Started Min första exempeldemon.

För att verifiera att demonen verkligen skriver ut datum och klockslag till filen /tmp/klockan_ar.txt var 20:e sekund, kan vi skriva ut den med cat.

#> cat /tmp/klockan_ar.txt
Aktuellt klockslag: 2019-05-12 04:12:21

Och en liten stund senare…

#> cat /tmp/klockan_ar.txt
Aktuellt klockslag: 2019-05-12 04:12:41

Avaktivera och stoppa tjänsten

Om vi vill stoppa tjänsten igen görs detta med systemctl stop.

#> systemctl stop my-own-daemon

För att verifiera att den verkligen är stoppad kan vi kontrollera detta med status-kommandot igen.

#> systemctl status my-own-daemon
● my-own-daemon.service - Min första exempeldemon
   Loaded: loaded (/etc/systemd/system/my-own-daemon.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Sun 2019-05-12 04:14:10 CEST; 7s ago
  Process: 26613 ExecStart=/usr/sbin/my-own-daemon.sh (code=killed, signal=TERM)
 Main PID: 26613 (code=killed, signal=TERM)

maj 12 04:08:21 red-dwarf systemd[1]: Started Min första exempeldemon.
maj 12 04:14:10 red-dwarf systemd[1]: Stopping Min första exempeldemon...
maj 12 04:14:10 red-dwarf systemd[1]: Stopped Min första exempeldemon.

Kom dock ihåg att vi har aktiverat tjänsten – vilket innebär att den startar automatiskt varje gång datorn startas. För att avaktivera tjänsten använder vi systemctl disable.

#> systemctl disable my-own-daemon
Removed /etc/systemd/system/multi-user.target.wants/my-own-daemon.service.

Avslutning

Du har nu skapat en alldeles egen tjänst i systemd! Svårare än så behöver det faktiskt inte vara. Däremot kan man göra mycket mer än bara det som vi nyss gått igenom. Det finns dessutom många fler systemctl-kommandon än dessa. För att lära dig mer om systemd rekommenderar jag dig att läsa vår genomgång Hantera tjänster med systemctl och Läs loggar med journalctl.


Nyhetsbrev
Nyhetsuppdateringar från tidningen direkt till din inkorg, helt kostnadsfritt. Avsluta när du vill.

Kommentarer

Kommentarsfältet är modererat. Det innebär att alla kommentarer granskas av ansvarig utgivare före publicering.

Du väljer själv om du vill ange ditt riktiga namn, en pseudonym eller vara helt anonym. Ingen registrering behövs.