
Ich habe die Aufgabe, aus einem Bash-Skript einen Dienst so zu entwerfen, dass er wie folgt aufgerufen wird: Dienst ... starten/stoppen/neu starten.
Das Skript, das ein Dienst werden soll, ist eine unendliche While-Schleife, die jede Minute aufwacht und einige Prüfungen durchführt. Ich nenne es so:
start() {
echo -n $"Starting $DESC:"
DAEMON_ARGS=$(xmlstarlet sel -T -t -m "/config/input/sensor/device/resource" -v "concat(../../@type, ' ', ../../@dev, ' ', @res)" -n $CONFIGURATION_FILE | extract_devices) # get device names out of XML file
echo "daemon args $DAEMON_ARGS"
start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
echo}
pid und daemon werden wie folgt definiert:
PIDFILE="/var/run/detection.pid"
NAME="jblub_control_loop.sh"
DAEMON="/root/test_det/${NAME}"
Wenn ich laufe
./detection start (habe auch versucht, es in init.d zu kopieren und mit service detection start auszuführen)
Das Init-Skript kommt einfach nicht aus der Schleife heraus und bleibt in der Start-Stop-Daemon-Funktion blockiert. Wenn ich die unendliche While-Schleife in meiner jblub_control_loop.sh auskommentiere, wird sie zwar durchlaufen, aber es wird keine PID-Datei erstellt.
Meine Frage ist, wie ich ein Skript mit einer Endlosschleife ordnungsgemäß als Dienst starte und warum meine PID-Datei nicht erstellt wird.
Antwort1
Für den Anfang,
verwenden Sie den Schalter --background, damit es gegabelt wird. verwenden Sie den Schalter -m, um eine PID-Datei zu erstellen
start-stop-daemon --start --background -m --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
Eine vollständige Antwort finden Sie unterhttps://stackoverflow.com/questions/16139940/was-ist-start-stop-daemon-in-linux-scripting
Genießen