
BSD Daemons registrieren
« | 24 Mar 2024 | »BSD und Linux sind beides Unix-Kinder, also sehen die intern recht ähnlich aus…
Falsch!
Ich bin immer wieder überrascht, wie unterschiedlich sich diese beiden
Brüder entwickelt haben.
Und mich zwingt das jetzt in die Situation, dass ich alle Daemon-Scripts doppelt schreiben muss.
Die BSD Blutlinie hat sich ja leider auch aufgespalten in
OpenBSD,
NetBSD und
FreeBSD.
Fangen wir mal Net- und FreeBSD an, denn bei deren DNS sieht man noch
direkter die Verbindung.
Init Scripts in FreeBSD und NetBSD
BSD Init Scripts liegen in /etc/rc.d/
und sehen im Wesentlichen so aus:
(Ein Code sagt mehr als 1000 Worte)
1#!/bin/sh 2 3# PROVIDE: myserviced 4# REQUIRE: dependent_from_daemon 5 6 7#include OS-script functions: 8. /etc/rc.subr 9 10#set required variables: 11name=myserviced 12command="/usr/bin/myserviced" 13command_args="--my_additional_arg=value" 14pidfile="/var/run/myserviced.pid" 15start_cmd="/usr/bin/myserviced whatever_start_arg $command_arg" 16stop_cmd="whatever_daemon_stop_function" 17 18#execute OS-daemon start scripts 19load_rc_config $name 20run_rc_command "$1"
Das Geheimnis liegt also darin Variablen zu befüllen, die den System-internen
Scripts sagen, wie man den Dienst wirklich startet und dann führt man diese
Funktionen (run_rc_command
) einfach aus.
Mit den PROVIDE
und REQUIRE
Meta-Kommentaren lässt sich auch eine einfache
Abhängigkeitskette bilden und durch die Variablen sehen BSD Scripts eigentlich
immer recht aufgeräumt aus.
Eine separate Registrierung der Scripts ist nicht erforderlich, die bloße
Präsenz in /etc/rc.d/
reicht aus.
Beim konkreten Starten und Stoppen gibt es schon Unterschiede:
- In FreeBSD nutzt man
rcctl start|stop|status daemon_name
. - Während in NetBSD die Scripts direkt aufgerufen werden mit:
/etc/rc.d/daemon_name start|stop|status
Fazit
Im GATE Projekt lasse ich ja meine eigenen Daemons selbst forken, womit der
Start nur ein Aufruf ist und ein Stoppen durch kill
umgesetzt werden kann.
In Summe ist ein solches BSD Init Script auch trotz einiger Unterschiede recht einheitlich aufgebaut.