Hallo zusammen,
ich habe eine selbstgeschriebene C++-Anwendung, die sofort nach Programmstart eine Datei "debug.txt" anlegt bzw. dort Text anhängt. Mittels der daemontools will ich jetzt dafür sorgen, dass das Programm beim Booten automatisch startet und, sollte es abstürzen, automatisch neugestartet wird. Das hier ist mein Startskript namens supervise-app:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #!/bin/sh ### BEGIN INIT INFO # Provides: # Required-Start: # Required-Stop: # Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: . # Description: ### END INIT INFO case "$1" in stop) echo "Stopping monitoring" svc -d /usr/share/myAccount/myAppFolder ;; start) echo "Starting monitoring" supervise /usr/share/myAccount/myAppFolder & ;; restart) echo "Continuing monitoring" svc -u /usr/share/myAccount/myAppFolder ;; *) exit 1 ;; esac |
In myAppFolder liegt die notwendige run-Datei:
1 2 3 | #!/bin/sh echo Monitoring... exec ./myApp |
Jetzt das Problem
Ich arbeite ausschließlich mit dem root-Account. Ein manueller Aufruf funktioniert einwandfrei:
supervise /usr/share/myAccount/myAppFolder
Ich kann auch mein Skript supervise-app direkt aufrufen, geht ebenfalls (debug.txt erscheint auch):
./etc/init.d/supervise-app start
Wenn ich aber das Startskript zum Autostart hinzufüge
update.rc-d supervise-app defaults
und boote, dann zeigt mir ein mehrfacher Aufruf von
svstat /usr/share/myAccount/myAppFolder
folgende Ausgabe:
/usr/share/myAccount/myAppFolder/: up (pid 662) 0 seconds /usr/share/myAccount/myAppFolder/: up (pid 664) 0 seconds /usr/share/myAccount/myAppFolder/: up (pid 668) 1 seconds /usr/share/myAccount/myAppFolder/: up (pid 680) 0 seconds
Es wird also ständig versucht, die Anwendung zu starten, die läuft aber nur 0-1s. Allerdings wird wird nichtmal die "debug.txt" erzeugt, was die erste Anweisung in "main()" ist. Find findet nichts:
find / -name debug.txt
Ich bin ratlos, kann es sein, dass das Program gar nicht erst gestartet wird? Wieso geht es mit dem direkten Aufruf des Startskriptes? Ich bin für jede Idee dankbar ☺