Start-Stop-Daemon-Blöcke für Prozesse mit Endlosschleife

Start-Stop-Daemon-Blöcke für Prozesse mit Endlosschleife

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

verwandte Informationen