Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

PHP - mehrere Scripts gleichzeitig starten

bechri / 7 Antworten / Baumansicht Nickles

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

MfG Chris
bei Antwort benachrichtigen
Borlander bechri „PHP - mehrere Scripts gleichzeitig starten“
Optionen

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

bei Antwort benachrichtigen
Scotty7 bechri „PHP - mehrere Scripts gleichzeitig starten“
Optionen

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?

gens inculta nimis vehitur crepitante colossa.
bei Antwort benachrichtigen
Vagabund bechri „PHP - mehrere Scripts gleichzeitig starten“
Optionen

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?

bei Antwort benachrichtigen
bechri Vagabund „Ichs ag dazu nur: Dafür ist PHP nicht gemacht. Eine PHP Appliaktion wird...“
Optionen

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

MfG Chris
bei Antwort benachrichtigen
bechri Nachtrag zu: „entschuldigt bitte die späte Antwort, ich kann von zu Hause aus leider das...“
Optionen

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.

MfG Chris
bei Antwort benachrichtigen
Vagabund bechri „entschuldigt bitte die späte Antwort, ich kann von zu Hause aus leider das...“
Optionen

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

bei Antwort benachrichtigen
Synthetic_codes bechri „PHP - mehrere Scripts gleichzeitig starten“
Optionen

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.

'); DROP TABLE users;--
bei Antwort benachrichtigen