wie übergibt man Argumente an Linux-daemon/Dienst
Habe ich einen Linux-daemon (in der C-Sprache) senden bestimmte Informationen über UDP zu einem anderen computer. Es erfordert natürlich die remote-IP-Adresse und der port-Nummer. Ich speichern dieser daemon in /usr/local/bin/
und ich habe auch ein script in /etc/init.d/
zu starten|stoppen|Neustart des daemon.
So weit, IP-Adresse und port-Nummer werden an den daemon übergeben werden, direkt durch das Skript. Indem beispielsweise der start () - Teil des Skripts sieht wie folgt aus:
start() {
/usr/local/bin/lvsload_udp_s 192.168.122.25 47239
}
So, wenn die remote-IP und/oder port-Nummer ändert, muss ich ändern mein Skript, anstatt ändern einige Konfigurations-Datei. Es ist eine schlechte Praxis, die ich kenne.
Was ist die beste Art der übergabe der Argumente an mein daemon? Dank
- Was stoppen Sie von der Verwendung einer Konfigurationsdatei ?
- Sie könnten, zum Beispiel, installieren Sie eine signal-handler in Ihre daemon ... und haben es re-Lesen einer Konfigurationsdatei, die nach dem Empfang des Signals an:
kill -SIGUSR1 nnn
(wonnn
ist Ihr daemon pid). - ich denke, es funktioniert gut, so gibt es keine Notwendigkeit für config-Dateien. Parsen eines config-Datei für nur zwei Parameter?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum denken Sie Befehl Linie Parameter, die schlecht sind?
Konfigurationsdateien sind zusätzliche Arbeit, da müssen Sie analysieren Sie. Und gehen mit Ihrem Beispiel, ändern einer Konfigurationsdatei = ändern einer Datei. Ändern eines script = ändern einer Datei. Scheint nicht, wie viel von einem Unterschied, wenn Sie nur eine kleine Anzahl von Argumenten. Sie können sogar kleben Sie die Parameter in die Variablen am Anfang des Skripts, die es fast wie eine config-Datei 🙂 Einige Skripte selbst Quelle solcher "variable Einstellung-scripts", so dass es wirklich aussieht wie eine Konfigurationsdatei.
Wenn Sie finden einen Grund, warum Kommandozeilen-Parameter, die schlecht sind, dann gibt es eine gute chance, dass Sie auch eine Idee haben, was zu verwenden, statt. Wenn auf der anderen Seite, können Sie nicht einmal erklären, warum Sie den Befehl Linie Parameter, die schlecht sind, dann gibt es wahrscheinlich nichts falsch mit Ihnen...
A: Warum glaubst du, dass es "schlechte Praxis"????
"Good practices" gehören:
"TROCKEN" (Wiederhole Dich nicht - speichern von Daten in einem und nur einem Ort)
"KISS" (Keep it Simple, Stupid)
Ich würde sagen, dass ein parameter (command-line-IP-Adresse) in einem Skript (Ihr init.d-startup-Skript) hält beide Prinzipien ziemlich gut 🙂
IMHO...
PS:
Wenn Sie wirklich, dass eine Konfigurations-Datei geeignet ist - wenn es viele komplexe Konfigurationsdaten, muss analysiert werden, die beim Systemstart), dann zwei geeignete Orte wären:
Speichern Sie die config-Datei in /etc (und Ihre Anwendung in /usr/local/bin)
... oder ..
Speichern Sie die config-Datei im app-install-Verzeichnis (und eventuell definieren Sie eine Globale environment-variable zeigt auf das Installationsverzeichnis)
Dies ist distro-spezifisch. Auf debian, zum Beispiel die Konvention ist, dass /etc/init.d/foo enthält eine Zeile wie "source /etc/default/foo". Diese Datei enthält nur die Umgebungsvariablen z.B. DAEMON_ARGS="--remote-ip=192.168.0.1".
Wenn Sie bauen ein debian-Paket mit debhelper wird diese Struktur erstellt für Sie automatisch. Ich bin sicher, es gibt ähnliche tools für die Erstellung von "standard" - RPMs zu.
Umgebungsvariablen verwenden:
Soweit ich mich erinnere ist dies etwas konventionell mit der Prozesse gestartet
init.d
.Da haben Sie erwähnt, dass Sie mit Ubuntu haben Sie einen Blick auf
/etc/environment
- siehe docs. Aber wie jemand schon erwähnt hat, dies ist abhängig von Ihrer system/Distribution; ein anderer Weg ist es, die Umgebungsvariablen, z.B./etc/myDaemon.env
, dann Quelle, die von Ihrem init-Skript mit:Aber in deinem Fall ist so einfach, dass ich sehe auch nicht ein, ein problem mit dem halten der Argumente im Skript.