Ich (oder einer meiner Kollegen) muss ein oder mehrere Shell-Skripte schreiben, um die Ausführung eines Daemons zu steuern. Wir müssen in der Lage sein, den Dämon zu starten, ihn anzuweisen, ordnungsgemäß herunterzufahren und ein Herunterfahren zu erzwingen. Im Grunde ist es die Art von Dingen, für die man traditionell ein Skript verwenden würde /etc/init.d
.
Wir werden auf Ubuntu bereitstellen. Möglicherweise möchten wir RedHat / CentOS und möglicherweise AIX bereitstellen. Ich möchte die Möglichkeit haben, auf jedem Unix bereitzustellen, weil ich es mag, Dinge portabel zu machen.
Ist es also möglich, tragbare Service-Skripte zu schreiben?
Ich nehme an, ich kann ein portables Bourne-Shell-Skript schreiben, das wie ein normales init.d-Skript funktioniert und 'start' und 'stop' als Befehle akzeptiert. Das würde überall funktionieren und eine natürliche Schnittstelle auf mindestens Debian- und RedHat-Systemen bieten. Würde es woanders passen? Ist init.d universell? Gibt es Fallstricke, auf die Sie achten müssen?
Gibt es Tools zum Generieren von Service-Skripten in verschiedenen Formen? Etwas, wo ich Skriptfragmente zum Starten und Stoppen schreiben und das Tool Skripte für verschiedene Plattformen erstellen lassen kann.
Gibt es Alternativen zu plattformspezifischen Service-Skript-Konventionen? Ich bin auf Daemontools und Runit gestoßen . sind diese Alternativen zu init.d-Skripten? Sind sie gut? Was gibt es sonst noch so?
Ist das sinnvoll?
Antworten:
Es ist möglich, sie so zu schreiben, dass sie nicht von den Besonderheiten der Distribution abhängen, sondern nicht alle * nix-Startdienste auf dieselbe Weise. Ich bin mir bei AIX nicht sicher, aber Solaris verwendet zum Beispiel nicht einmal sysvinit, sondern smf.
CentOS / RHEL verwendet normalerweise /etc/rc.d/functions, um allgemeine Funktionen für das Init-Skript zu unterstützen, während Debian eine Binärdatei namens Start-Stop-Daemon verwendet. Dies ist wahrscheinlich ein Grund dafür, dass Init-Skripte in Upstream-Paketen häufig nicht gefunden werden.
Persönlich würde ich für jedes unterstützte Betriebssystem ein Init-Skript schreiben, das in das Paket dieses Betriebssystems aufgenommen wird.
quelle
/lib/lsb/init-functions
die einige Standardfunktionen enthält. Ich denke, diese Wrap-Dinge mögenstart-stop-daemon
, also gibt es dort ein gewisses Maß an Portabilität. Die Dokumentation zu diesen Funktionen ist jedoch sehr schlecht.