Problem mit daemon(0,0) bei Service (Fedora 9, 10, 11, 12)
-
Hallo allerseits.
Ich habe einen Server geschrieben, der beim Boot / Shutdown gestartet, Bzw. gestoppt, wird.
Ich versetze den Dienst mittels
daemon ( 0, 0 )
In den Daemon-Modus. Als Init-Script habe ich ein vorhandenes Script angepasst.
Nun habe ich folgendes Problem. Wenn ich mit "service servicename status" den status abfrage, dann meint er, die pid-Datei würde existieren, aber der Prozess wäre tot. Das stimmt aber nicht. Mittlerweile konnte ich feststellen, das die Pid im pidfile einfach falsch ist. woran kann das liegen? Wird durch darmon() die PID gewechselt?
Lasse ich die Daemon-Funktion weg, bleibt er an der stelle stehen und wartet darauf, das der Daemon beendet wird, bevor weiter gebootet wird.
Wo liegt da mein Denkfehler. Habe ich irgendwas übersehen?
Gruß,
Dirk
-
man: daemon(3) ändert die PID (sogar zweimal, da zweimal geforkt wird).
Hier findest du zB eine Erklärung was daemon im einzelnen genau macht: http://web.archive.org/web/20060603181849/http:/www.linuxprofilm.com/articles/linux-daemon-howto.html#s4
(mit man: getpid(2) kommst du an die PID)
-
Hallo Rüdiger.
rüdiger schrieb:
man: daemon(3) ändert die PID (sogar zweimal, da zweimal geforkt wird).
Hier findest du zB eine Erklärung was daemon im einzelnen genau macht: http://web.archive.org/web/20060603181849/http:/www.linuxprofilm.com/articles/linux-daemon-howto.html#s4
(mit man: getpid(2) kommst du an die PID)
Ohne den Link jetzt gelesen zu haben nehme ich an, das er das macht, um nicht mehr Session-Master zu sein, oder so ähn lich. Habe das hier beim Stöbern im Board gefunden.
So weit so gut. Warum funktioniert das mit der Pid denn bei allen anderen Servern, die ich laufen habe. Die PID ermittelt das Init-Script schon und legt die PID-Datei an. Scheinbar aber mit der Pid, die das Programm beim Start hat. Gestartet wird das Prog. vom Script mit "daemon $prog" usw. Mache ich aber in meinem Programm kein Daemon, bleibt das System beim Booten an der Stelle stehen, bis ich das Programm kille.
Irgendwo mache ich einen Denkfehler, glaube ich. Funktionieren tut das ganze, das programm wird auch, wenn ich das Init-Script mit der Anweisung stop aufrufe, angehalten.
Mich stört nur, das ich den Status nicht abfragen kann. Das ist zwar eher ein Schönheitsfehler, aber das wurmt mich.Ich könnte auch hingehen und die PID-Datei vom Programm selbst erstellen lassen. Mich onteressiert aber nun, wie das so geht.
Ich habe als Ursprungsscript das Startscript von ddclient genommen. Das scheint mir aber kein Daemon an sich zu sein und multithreaded wie mein Server ist es wohl auch nicht. ich werde mir mal andere Init-Scrips ansehen und vergleichen. Trotzdem wäre ich für jeden Fingerzeig dankbar.
Gruß,
Dirk
-
Die anderen Programme rufen kein daemon(0,0) in der Anwendung auf, sondern werden über das Programm man: daemon(1) daemonisiert. Dieses Programm kümmert sich dann um die PID-File.