BSD Daemons registrieren

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.

📧 📋 🐘 | 🔔
 

Meine Dokus über:
 
Weitere externe Links zu:
Alle extern verlinkten Webseiten stehen nicht in Zusammenhang mit opengate.at.
Für deren Inhalt wird keine Haftung übernommen.



Wenn sich eine triviale Erkenntnis mit Dummheit in der Interpretation paart, dann gibt es in der Regel Kollateralschäden in der Anwendung.
frei zitiert nach A. Van der Bellen
... also dann paaren wir mal eine komplexe Erkenntnis mit Klugheit in der Interpretation!