Service unter Linux erstellen

Ein eigenes Script als Linux-Service laufen zu lassen, ist nicht schwer.

Service unter Linux erstellen
Photo by Tyler Nix / Unsplash

Wir kennen viele Services unter Linux. Den SSH-Service, oder den Bluetooth-Service zum Beispiel.

Diesmal will ich mir einen Service erstellen, der beobachtet, welche Smartphones sich in der Nähe befinden. Dieser Service darf nicht abstürzen. Er soll also, falls er aus irgendeinem Grund nicht mehr läuft, neu gestartet werden.

Was brauchen wir?

Es ist eigentlich nicht viel. Ich habe es folgendermaßen realisiert:

  • Eine Service-Datei: /etc/systemd/system/check_probe_reqs.service:
# /etc/systemd/system/check_probe_reqs.service
[Unit]
Description=Service zum Überwachen von Probe Requests
After=network.target

[Service]
ExecStart=/usr/local/bin/check_probe_reqs
Restart=always

[Install]
WantedBy=multi-user.target
Die Datei braucht die Rechte 644. Nicht vergessen!
  • Das Script selbst unter /usr/local/bin/check_probe_reqs:
#!/bin/bash

IOUSER=mqtt-user
IOPASS=mqtt-pass
INTERFACE=$(iwconfig 2>/dev/null | sed -ne '/ESSID/{s/ .*//p}')

rfkill unblock all
iw $INTERFACE interface add wlan0mon type monitor
ifconfig wlan0mon up

tcpdump -l -i wlan0mon -e -s 256 subtype probe-req |
while read packet
    do
        MAC="$(echo "$packet" | sed -e 's/.*SA://;s/ .*//')"
        ESSID="$(echo "$packet" | sed -e 's/.*(//;s/).*//')"
        mosquitto_pub -h iobroker -p 1884 -u $IOUSER -P $IOPASS -i iobroker -t WIFI/MAC -m ${MAC:-none} 
        mosquitto_pub -h iobroker -p 1884 -u $IOUSER -P $IOPASS -i iobroker -t WIFI/ESSID -m ${ESSID:-none} 
        # echo $MAC - $ESSID
done
Smartphones an die Hausautomation melden
  • Den neuen Service starten
sudo systemctl daemon-reload
sudo systemctl enable --now check_probe_reqs

Fertig!

Falls wir nun wissen wollen, ob der Dienst läuft, können wir wie gewohnt mit systemctl status check_probe_reqs nachfragen, ob alles ordnungsgemäß funktioniert:

Was ist nun der Nutzen?

Ich zeichne nun erstmal die WLAN-Events auf, und beobachte in welchem Zusammenhang andere Ereignisse damit stehen.

In der Hausautomation kann ich dann Regeln schreiben, die mir zum Beispiel mitteilen, ob der Postbote mit seinem Lesegerät in der Straße ist. Wir bekommen auch von einem Bauernhof Waren geliefert. Ich möchte ihn da nicht lange aufhalten. So kann ich ihm quasi entgegenkommen, sobald ich bemerke, dass sein Auto vorfährt...

Meine nächste Verbesserung wird wohl der bereits beschriebene Auto-Unlock Mechanismus meines Laptops werden...

Fazit

Ich habe es früher immer für sehr kompliziert gehalten, solche Eingriffe ins System vorzunehmen. Wenn man in der Lage ist, sein eigenes Tool zu schreiben, sollte die Erstellung eines Services daraus ebenso leicht fallen.