Tips en Trucs 2017

Script starten met systemd

Je kunt verschillende redenen hebben om bij het starten van een systeem een script op te starten: je wilt een bepaalde dienst (service) starten, schijfruimte controleren, een back-up maken, enz. Vroeger werd daarvoor cron of SysV gebruikt, vandaag gebruiken we systemd.

In het hieronder beschreven voorbeeld beschrijven we een basis waarop je later kunt verder bouwen. We starten daarbij een script om de schijfruimte die door de /home/ map wordt ingenomen naar een tekstbestand in de /root/ map te schrijven.

Systemd service unit

Eerst moeten we een systemd startup script aanmaken, in de map /etc/systemd/system/ maken we het tekstbestand disk-space-check.service (bijvoorbeeld met de opdracht sudo joe /etc/systemd/system/disk-space-check.service) met de volgende inhoud:

[Unit]
After=network.target

[Service]
ExecStart=/usr/local/bin/disk-space-check.sh

[Install]
WantedBy=multi-user.target

Bovenstaand systemd startup script bevat het absolute minimum om een script via systemd te starten. Meer informatie kan je vinden in de manual pagina:

dany@pindabook:~> man systemd.service
Systemd manpage

Script

Daarna schrijven we het uit te voeren script. De locatie en de naam van het script is al gedefinieerd in het systemd startup script. Het script kan je schrijven met de opdracht:

dany@pindabook:~> sudo joe /usr/local/bin/disk-space-check.sh

Met de volgende inhoud:

#!/bin/bash

date > /root/disk_space_report.txt
du -sh /home/ >> /root/disk_space_report.txt

Na het opslaan van het script, test je het met de volgende opdrachten:

dany@pindabook:~> sudo sh /usr/local/bin/disk-space-check.sh
dany@pindabook:~> sudo cat /root/disk_space_report.txt
vr okt  6 21:47:08 CEST 2017
9,5G    /home/

Configureren en installeren

Voor we het systeem herstarten, moeten we het script uitvoerbaar maken:

dany@pindabook:~> sudo chmod 744 /usr/local/bin/disk-space-check.sh

Daarna installeren en activeren we de systemd dienst (service) om het script uit te voeren bij het starten van het systeem.

dany@pindabook:~> sudo chmod 664 /etc/systemd/system/disk-space-check.service
[sudo] wachtwoord voor root: 
dany@pindabook:~> sudo systemctl daemon-reload
dany@pindabook:~> sudo systemctl enable disk-space-check.service
Created symlink from /etc/systemd/system/multi-user.target.wants/disk-space-check.service to /etc/systemd/system/disk-space-check.service.

Test voor je herstart het system startup script:

dany@pindabook:~> sudo systemctl start disk-space-check.service
dany@pindabook:~> sudo cat /root/disk_space_report.txt
Sat Oct  7 14:14:36 CEST 2017
9.5G    /home/

Nu wordt bij elke systeemstart het script door systemd uitgevoerd.