Låt systemd ta hand om dina demoner
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
.
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):
#> 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.
Relaterade artiklar
-
Avlyssna trafik på servern med Wireshark och TShark
Wireshark är ett ovärderligt verktyg för att felsöka nätverkskonfigurationer, applikationer, API:er, demoner och mycket annat. I kombination med
tshark
kan vi dessutom avlyssna trafiken på en server i realtid. -
Var försiktig med att curl:a skript som root
Att installera program i Linux genom att omdirigera utdata från Curl till skalet är snabbt och smidigt. Men det är ack så farligt om du inte känner till programmet eller dess ursprung.
-
Vidarebefordran av SSH-agenten
SSH agent forwarding, eller vidarebefordran av SSH-agenten, innebär att man kan vidarebefordra SSH-agenten till ett fjärrsystem. På så sätt behöver man inte kopiera sin privata SSH-nyckel till fjärrsystemet, eller skapa flera nycklar för olika system. Men det finns risker med det.
-
Jenkins som ett alternativ till Ansible Tower
Ansible Tower kommer med en stor prislapp, speciellt för ett mindre företag eller en privatperson. AWX å andra sidan är helt fritt, men kräver numera Kubernetes. För den som vill automatisera sina Ansible Playbooks går det dock bra att använda Jenkins som en ersättning för Tower och AWX.
-
Hämta data från API:er med cURL och jq
Med cURL och jq går det att extrahera data från API:er direkt från kommandoraden. Jq är en JSON-tolkare och beskrivs av utvecklarna som sed och awk för JSON.
Senaste nyheterna och inläggen
-
Avlyssna trafik på servern med Wireshark och TShark
Wireshark är ett ovärderligt verktyg för att felsöka nätverkskonfigurationer, applikationer, API:er, demoner och mycket annat. I kombination med
tshark
kan vi dessutom avlyssna trafiken på en server i realtid. -
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Sommarens skånska demopartyn
Årets sommar bjuder på två skånska demopartyn. Först ut är Reunion i Kvidinge den 28–30 juni. Därefter är det Pågadata i Örtofta den 9–11 augusti.
-
Riskerna med BankID som ingen pratar om
BankID är ett säkert och smidigt sätt att identifiera sig online. Men i takt med dess ökade popularitet och användning har det blivit en svag länk – en single point of failure – på mer än ett sätt.
-
Polisernas fängelsedomar står fast
Efter tre år är målet mot de två poliser som olovligen tog sig in i en berusad mans bostad i Landskrona och misshandlade honom klart. Högsta domstolen beslutade den sjätte mars att avvisa överklagan. Fängelsedomarna för poliserna står därmed fast.
Utvalda artiklar
-
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Datorparty i Landskrona
I helgen höll Syntax Society sitt årliga sommarparty. Platsen var en källarlokal i Landskrona där ett femtontal personer medverkade.
-
Det första Pågadata har ägt rum
I helgen ägde det första Pågadata rum – uppföljaren till Gubbdata. Platsen var Folkets Hus i Kvidinge. Organisatör av partyt var Johan “z-nexx” Osvaldsson med hjälp från Jesper “Skuggan” Klingvall. Partyt hade över 100 anmälda deltagare.
-
Även hovrätten fäller poliserna för att ha satt dit oskyldig
Hovrätten fastställer straffet för de två poliser som förra året dömdes till vardera ett års fängelse av Lunds tingsrätt för att ha misshandlat och satt dit en oskyldig man. De båda poliserna ska även betala skadestånd till mannen.
-
Retroloppis i Påarp
Idag var det retroloppis hos Andreas Nilsson i Påarp. På baksidan av huset fanns hundratals spel uppradade på långa bord. Trots friska vindar och sval temperatur var loppisen välbesökt.
CyberInfo Sverige är ett it- och medieföretag i nordvästra Skåne som tillhandahåller böcker, utbildningar, nyheter och konsulttjänster inom Linux, säkerhet och programmering.
CyberInfo Sverige är godkänd för F-skatt, är momsregistrerat och innehar
utgivningsbevis för webbplatsen www.cyberinfo.se.