Guten Abend Jungs,
es geht um folgendes: Ich habe einen Algorithmus in PHP geschrieben, der prüft, ob meine Server noch online sind. Bis der die Liste an IPs durch hat, dauert es natürlich ein paar Sekunden.
Was ich nun geplant habe: Wenn ich diesen Algorithmus z.B. 3x gleichzeitig laufen lassen würde, könnten die Ressourcen besser genutzt werden, und die Liste an Servern wäre schneller abgearbeitet.
Es soll also einen PHP-Skript geben, der je nach Systemauslastung meinen Algorithmus, der in einer anderen PHP-Datei steht, x-fach startet.
Meine Frage an euch:
Wie kann ich PHP anweisen, notfalls auch über eine andere Sprache, PHP-Skripts x-fach zu starten?
Beim Befehl "system($scriptpfad);" habe ich das Problem, dass der ausführende PHP-Skript wartet, bis der auszuführende Skript abgearbeitet ist.
MfG
BeChri
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Hilft Dir http://de2.php.net/manual/de/function.proc-get-status.php weiter? ;-)
Ansonsten frage ich mich allerdings warum Du die Prüfung nicht regelmäßig per Cron-Job laufen lässt?
Dann könntest Du z.B. auch eine Mail versenden wenn es Probleme gibt...
(oder die schon gesammelten Daten nur noch ausgeben...)
Gruß
Borlander
Wieviele Server sind das? Kann man die nicht schneller machen eventuell prüfen ob nur eine statische Textdatei per HTTP oder was auch immer erreichbar ist?
Ichs ag dazu nur: Dafür ist PHP nicht gemacht.
Eine PHP Appliaktion wird gestartet und muss auch beendet werden. Endloschleifen sind hier eigentlich Fehler.
Wenn du einen Port testen willst, solltest du diesen test NUR dann machen, wenn du auch es direkt wissen musst. Durch deine Pingerei z.B. erzeugt du Trafficmüll und vorallem belastest du den Server.
Die frage ist, was genau willst du erreichen? Wozu musst du alle paar Sekunden pingen? Dafür wäre z.B. eine kleine Appliaktionen im Systemtray viel besser ;-) geht super mit.NET und C#.
PS: Wenn dein Algorithmus Sekunden bruacht ist er entweder sehr schlecht geschrieben. Wie funktioneirt er denn?
entschuldigt bitte die späte Antwort, ich kann von zu Hause aus leider das Antwortformular nicht öffnen.
Die Server werden nicht direkt angepingt, sondern ein Zugriff per fopen getestet. Die Anzahl der zu prüfenden Rechner liegt bei 15 Stück.
Zwischenzeitlich getestet habe ich eine Methode Child-Prozesse zu starten, allerdings ist diese Methode sehr ressourcenintensiv.
Dann werde ich wohl etwas in C# schreiben!
Danke!
MfG
BeChri
ich habe im Prinzip den Code hier übernommen:
http://www.php-resource.de/forum/showthread/t-52159.html
und lass ihn in einer Schleife laufen, bis alle zu prüfenden Rechner abgearbeitet sind.
Du hast trotzdem nicht verstanden, wozu PHp da ist... PHP ist eine Art Präprozessor, der HTML/XML usw. erzeugt. Dein Vorhaben, damit die erfügbarkeit eines System zu prüfen macht keinen Sinn, nur dann, wenn die Abfrage lediglich bei einem Aufruf des Scripts statfindet.
Ich denke C/C++ ist hier die bessere Lösung, wobei ich sagen muss, dass ich dich erschießen würde, wenn du meinen Server so oft anfragen würdest ôo
wie wärs wenn du das mit popen über den klassischen unix-weg ablöst?
Threading in Php ist zwar möglich, aber hässlich.
mit popen könntest du die prüfscripts allesamt starten, und mit select + timeout 0s allesamt ein einer schleife auslesen. was fertig ist, wird geclosed, und der rest wird erneut abgefragt.