Moin,
ich benutze als Schutz vor Mehrfachausführung eines Dienstes auf dem Server eine .lock-Datei. Existiert sie, weiss ich, dass noch ein Dienst von meinem Programm läuft. Man kennt diese Verfahren ja von vielen anderen Programmen ebenfalls.
Die Frage ist nun wie man intelligent herausfindet ob das Programm nun tatsächlich noch läuft oder nicht (Stichwort Serverabsturz - verwaiste .lock-Datei). Die PID in die .lock Datei schreiben wäre eine Möglichkeit. Aber es gibt AFAIK keine Plattformübergreifende Möglichkeit auf eine PID zuzugreifen.
Eine andere Möglichkeit wäre im Minutentakt Datum/Uhrzeit der .lock-Datei zu aktualisieren. Bei einem Serverabsturz wäre so eine .lock-Datei dann veraltet und auf diese Weise wäre klar dass der Dienst nicht mehr läuft. Ginge aber nur, wenn der Server mindestens mal eine Minute für einen Neustart braucht was nicht unbedingt sein muss...
Alles irgendwie nicht so richtig befriedigend. Eine dritte Möglichkeit wäre den Dienst auf einem bestimmten Port auf Anfragen lauschen zu lassen und bei Start des Dienstes erstmal versuchen diesen Port zu erreichen. Ist er offen, läuft bereits ein Dienst und der Start wird abgebrochen. Läuft er nicht startet der Dienst durch..
Wie löst ihr solche Aufgaben? Oder gibt es da etwas eleganteres was ich jetzt nicht kenne?
Viele Grüße.
Martin
ich benutze als Schutz vor Mehrfachausführung eines Dienstes auf dem Server eine .lock-Datei. Existiert sie, weiss ich, dass noch ein Dienst von meinem Programm läuft. Man kennt diese Verfahren ja von vielen anderen Programmen ebenfalls.
Die Frage ist nun wie man intelligent herausfindet ob das Programm nun tatsächlich noch läuft oder nicht (Stichwort Serverabsturz - verwaiste .lock-Datei). Die PID in die .lock Datei schreiben wäre eine Möglichkeit. Aber es gibt AFAIK keine Plattformübergreifende Möglichkeit auf eine PID zuzugreifen.
Eine andere Möglichkeit wäre im Minutentakt Datum/Uhrzeit der .lock-Datei zu aktualisieren. Bei einem Serverabsturz wäre so eine .lock-Datei dann veraltet und auf diese Weise wäre klar dass der Dienst nicht mehr läuft. Ginge aber nur, wenn der Server mindestens mal eine Minute für einen Neustart braucht was nicht unbedingt sein muss...
Alles irgendwie nicht so richtig befriedigend. Eine dritte Möglichkeit wäre den Dienst auf einem bestimmten Port auf Anfragen lauschen zu lassen und bei Start des Dienstes erstmal versuchen diesen Port zu erreichen. Ist er offen, läuft bereits ein Dienst und der Start wird abgebrochen. Läuft er nicht startet der Dienst durch..
Wie löst ihr solche Aufgaben? Oder gibt es da etwas eleganteres was ich jetzt nicht kenne?
Viele Grüße.
Martin